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

dhxwm5r4  于 2022-11-11  发布在  其他
关注(0)|答案(8)|浏览(366)

在VIM中选择不带换行符的整行的最短方法是什么?
我知道SHIFT + V会选择整行,但会加上新行字符
要做到这一点,我去行,我按下:

  • ^(将光标置于行首)
  • v(启动视觉选择)
  • $(选择包括换行符在内的整行)
  • 向左(取消选取新行字符)

我也知道我可以制作一个录音,但是我想问的是,有没有内置的快捷方式......

1qczuiv0

1qczuiv01#

是的,g_就是您要查找的内容。g_$类似,但结尾处没有换行符。
使用0vg_^vg_,分别取决于您是要从行首复制,还是要从行首的第一个字符复制。

fbcarpbf

fbcarpbf2#

不,没有任何内置的东西可以完成这项工作。这就是为什么人们甚至创造了插件来满足这一需求。
也许最流行的选择是textobj-line。使用textobj-line,你会得到两个新的文本对象,al“一行”和il“内部行”。然后,

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

两者都不包括所选内容中的换行符。
如果你问我的话,这是一个非常方便的插件。它也可以和运算符一起使用。
根据要求,安装:
1.使用普通Vim:
1.获取最新的 * textobj-user * 并将其目录解压缩到~/.vim
1.获取最新的 * textobj-line * 并将其目录解压缩到~/.vim
1.生成帮助标记:helptags ~/.vim/doc
1.使用插件管理器(推荐):只需按照插件管理器的常规安装过程进行操作,并且不要忘记安装 textobj-user 依赖项。

lxkprmvk

lxkprmvk3#

0v$
^v$
0vg_
^vg_
$v0
$v^
g_v0
g_v^

所有的Map都是以不同的概念来执行工作的(从第一列或从第一个可打印字符,到最后一个字符或到最后一个可打印字符)。如果你喜欢,你可以创建一个自定义Map。
请注意,在vim中通常不需要选择文本。

t40tm48m

t40tm48m4#

再加上@glts的答案,你可以只使用vanilla vimMap来复制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等命令可按预期方式工作。

06odsfpq

06odsfpq5#

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

8xiog9wr

8xiog9wr6#

不完全是对你的问题的回答,但我想知道你是否可以跳过 * 选择 * 行,直接做你想要的下一步:

  • 如果你想改线,就抄送
  • 如果您想删除该行,0 y $(note $ here不会捕获换行符,因为它在正常模式下不会移动到换行符上,这与可视模式不同)
bt1cpqcv

bt1cpqcv7#

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

nnoremap <leader>v 0v$
xxls0lw8

xxls0lw88#

另一个解决方案$将按照您的要求工作

:vnoremap $ $h

将原始$命令Map到新命令

相关问题