在VIM中选择整行,不带新换行符

时间:2013-11-23 17:34:09

标签: vim

在VIM中选择没有新行字符的整行的哪种方法最短?

我知道 SHIFT + v 选择整行,但是换行符号为


要做到这一点,我会去行,然后按:

  • ^ (将光标放在行的开头)
  • v (启动视觉选择)
  • $ (选择包括换行符的整行)
  • (取消选择换行符)

我也知道我可以创建一个做这样的事情的录音。但我在问是否有任何内置快捷方式......

7 个答案:

答案 0 :(得分:42)

是的,g_正是您要找的。 g_$类似,但最后没有换行符。

使用0vg_^vg_,具体取决于您是要分别从该行的开头还是该行的第一个字符进行复制。

答案 1 :(得分:23)

不,没有任何内置功能。这就是为什么人们甚至创建了插件来满足需求。

最受欢迎的选择可能是textobj-line。使用textobj-line,您将获得两个新文本对象al“一行”和il“内部行”。然后,

  • vil选择该行的可打印内容(如^vg_),
  • val选择整行内容(例如0v$h)。

两者都不包括选择中的换行符。

如果你问我,非常方便的插件。它也适用于运营商。


根据要求,安装:

  • 用普通的Vim:
    1. 获取最新的 textobj-user 并将其目录解压缩到~/.vim
    2. 获取最新的 textobj-line 并将其目录解压缩到~/.vim
    3. 生成帮助标记:helptags ~/.vim/doc
  • 使用插件管理器(推荐):只需按照插件管理器的常规安装步骤操作,并且不要忘记安装 textobj-user 依赖项。

答案 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”的缩写)从第一个非空白字符到最后一个非空白字符。

诸如yilvalcil之类的命令可以正常工作。

答案 5 :(得分:1)

您仍然可以映射到您想要的内容,例如:

nnoremap <leader>v 0v$

答案 6 :(得分:0)

另一种解决方案 $ 将如您所愿

:vnoremap $ $h

将你原来的 $ 命令映射到新的命令