在VIM中选择没有新行字符的整行的哪种方法最短?
我知道 SHIFT + v 选择整行,但是换行符号为。
要做到这一点,我会去行,然后按:
我也知道我可以创建一个做这样的事情的录音。但我在问是否有任何内置快捷方式......
答案 0 :(得分:42)
是的,g_
正是您要找的。 g_
与$
类似,但最后没有换行符。
使用0vg_
或^vg_
,具体取决于您是要分别从该行的开头还是该行的第一个字符进行复制。
答案 1 :(得分:23)
不,没有任何内置功能。这就是为什么人们甚至创建了插件来满足需求。
最受欢迎的选择可能是textobj-line。使用textobj-line,您将获得两个新文本对象al
“一行”和il
“内部行”。然后,
vil
选择该行的可打印内容(如^vg_
),val
选择整行内容(例如0v$h
)。两者都不包括选择中的换行符。
如果你问我,非常方便的插件。它也适用于运营商。
根据要求,安装:
~/.vim
。~/.vim
。:helptags ~/.vim/doc
。答案 2 :(得分:10)
0v$
^v$
0vg_
^vg_
$v0
$v^
g_v0
g_v^
所有人都使用不同的线条概念(从第一列或从第一个可打印字符到最后一个字符或最后一个可打印字符)来完成工作。如果您愿意,可以创建自定义映射。
请注意,在vim中通常不需要选择文本。
答案 3 :(得分:2)
如果要将行复制到缓冲区中,可以使用D从光标位置删除到行尾,然后用u恢复更改。文本将被复制到缓冲区而没有新的行符号。所以命令是:
Du
答案 4 :(得分:2)
通过@glts附加答案,您可以仅使用普通vim映射来复制textobj-line插件的功能,而无需安装插件。
为此,请将以下内容添加到您的.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
文本对象(“ a line”的缩写)包括一行中的所有字符,但不包括结尾的换行符。这包括所有空白。
il
文本对象(“ inside line”的缩写)从第一个非空白字符到最后一个非空白字符。
诸如yil
,val
和cil
之类的命令可以正常工作。
答案 5 :(得分:1)
您仍然可以映射到您想要的内容,例如:
nnoremap <leader>v 0v$
答案 6 :(得分:0)
另一种解决方案 $ 将如您所愿
:vnoremap $ $h
将你原来的 $ 命令映射到新的命令