选择VIM中没有换行符的整行的最短方法是什么?
我知道SHIFT+v选择整行,但使用换行符。
要做到这一点,我走到线路,然后按:
- ^(将光标放在行的开头)
- v(开始视觉选择)
- $(选择包括换行符在内的整行)
- 向左(取消选择换行符)
我也知道,我可以创造一个录音做这样的事情。但我在问是否有内置的快捷方式。。。
是的,g_
就是您想要的。g_
类似于$
,但末尾没有换行符。
使用0vg_
或^vg_
,具体取决于是要从行的开头复制,还是要从行上的第一个字符复制。
不,没有任何内置功能可以完成这项工作。这就是为什么人们甚至创建了插件来满足需求。
可能最受欢迎的选择是textobj行。使用textobj行可以获得两个新的文本对象,al
"一行"和il
"内部行"。然后,
- CCD_ 8选择该行的可打印内容(如CCD_
val
选择整行内容(如0v$h
)
两者都不包括选择中的换行符。
如果你问我的话,这个插件很方便。它也适用于运算符。
根据要求,安装:
- 使用普通Vim:
- 获取最新的textobj用户并将其目录提取到
~/.vim
中 - 获取最新的textobj行并将其目录提取到
~/.vim
中 - 生成帮助标签
:helptags ~/.vim/doc
- 获取最新的textobj用户并将其目录提取到
- 使用插件管理器(推荐):只需按照插件管理器的常规安装过程进行操作,也不要忘记安装textobj user依赖项
0v$
^v$
0vg_
^vg_
$v0
$v^
g_v0
g_v^
所有人都对一行是什么有不同的概念(从第一列或从第一个可打印字符到最后一个字符或最后一个可打印的字符)。如果愿意,可以创建自定义映射。
请注意,在vim中,选择文本通常是不必要的。
添加@glts的答案,您可以只使用普通的vim映射复制textobj行插件的功能,而不需要安装插件。
为此,请将以下内容添加到您的.vimrc
中
vnoremap al :<C-U>normal 0v$h<CR>
omap al :normal val<CR>
vnoremap il :<C-U>normal ^vg_<CR>
omap il :normal vil<CR>
al
文本对象("一行"的缩写)包括一行中的所有字符,但不包括终止换行符。这包括所有空白。
il
文本对象("内部行"的缩写)从第一个非空白字符到最后一个非空白字符串。
yil
、val
和cil
等命令可以按预期工作。
如果您想将行复制到缓冲区中,可以使用Du,它将从光标位置删除到带D的行的末尾,然后用u还原更改。文本将被复制到缓冲区时不带换行符。
为视觉模式重新定义$
通过在.vimrc
中添加以下视觉映射,可以永久消除在视觉模式下对换行的不必要选择:
vnoremap $ g_
这取代了$
在视觉模式下的标准行为,用于在换行g_
之前向右移动。
您可以使用选择选项,它允许您自定义行选择的行为:
set selection=old
将不会选择换行符。
您仍然可以映射到您想要的内容,例如:
nnoremap <leader>v 0v$
另一个解决方案$将按您的意愿运行到
:vnoremap $ $h
将原来的$命令映射到新的
这不是你问题的答案,但我想知道你是否可以跳过选择这一行,直接做你想做的下一步:
- 如果您想更改线路,只需cc
- 如果你想拉线,0y$(注意$这里不会捕捉断线,因为它在正常模式下不会移动,不像在视觉模式下)