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

Ion*_*zău 29 vim

哪个是在VIM中没有新行字符的情况下选择整行的最短路径?

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


要做到这一点,我去了线,我按:

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

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

jer*_*rzy 47

是的,g_是你在找什么.g_就像$,但最后没有换行符.

使用0vg_^vg_,取决于您是否要分别从行的开头或行上的第一个字符进行复制.

  • 下划线的人非常有用。不知道>)谢谢:D (2认同)
  • 我将其映射为``.vimrc```中的``noremap Y 0vg_y```,这样现在我只需按``shift+y```即可复制没有新行的行 (2认同)

glt*_*lts 24

不,没有任何内置工作可以完成.这就是为什么人们甚至创建了插件来满足需求.

可能最受欢迎的选择是textobj-line.使用textobj-line,您将获得两个新的文本对象,al"一条线"和il"内线".然后,

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

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

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


根据要求,安装:

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

  • 在g_之下的答案很明确,可以满足许多情况 (2认同)

rom*_*inl 10

0v$
^v$
0vg_
^vg_
$v0
$v^
g_v0
g_v^
Run Code Online (Sandbox Code Playgroud)

所有人都可以通过不同的线条概念(从第一列或从第一个可打印字符到最后一个字符或最后一个可打印字符)来完成工作.如果您愿意,可以创建自定义映射.

请注意,在vim中通常不需要选择文本.

  • @PeterDolan,Vim 具有运算符、动作和文本对象,涵盖了许多常见用例,通常不需要选择。例如,`dip` 的意思是“删除这个段落”,而`vipd` 的意思是“选择这个段落并删除它”。前者比前者更短,更直观。如果想要提高 Vim 的效率,熟悉运算符和文本对象几乎是一项要求。 (3认同)
  • 这是疯狂的事后分析,但是你能详细解释一下“在 vim 中通常不需要选择文本”的意思吗?谢谢你的回答顺便说一句。 (2认同)

Pas*_*rik 5

如果要将行复制到缓冲区中,可以使用Du,它将使用 D 删除从光标位置到行尾的内容,然后使用 u 恢复更改。文本将被复制到缓冲区,没有换行符号。


小智 5

除了@glts 的答案之外,您可以仅使用 vanilla 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>
Run Code Online (Sandbox Code Playgroud)

al文本对象(以下简称“线”)包括在一个行中的所有字符,但不终止换行符。这包括所有空白。

il文本对象(以下简称“内线”)变为从第一个非空白字符到最后一个非空白字符。

命令如yilvalcil预期的工作。