在VIM中选择不带换行符的整行的最短方法是什么?我知道SHIFT + V会选择整行,但会加上新行字符。要做到这一点,我去行,我按下:
我也知道我可以制作一个录音,但是我想问的是,有没有内置的快捷方式......
1qczuiv01#
是的,g_就是您要查找的内容。g_与$类似,但结尾处没有换行符。使用0vg_或^vg_,分别取决于您是要从行首复制,还是要从行首的第一个字符复制。
g_
$
0vg_
^vg_
fbcarpbf2#
不,没有任何内置的东西可以完成这项工作。这就是为什么人们甚至创造了插件来满足这一需求。也许最流行的选择是textobj-line。使用textobj-line,你会得到两个新的文本对象,al“一行”和il“内部行”。然后,
al
il
vil
val
0v$h
两者都不包括所选内容中的换行符。如果你问我的话,这是一个非常方便的插件。它也可以和运算符一起使用。根据要求,安装:1.使用普通Vim:1.获取最新的 * textobj-user * 并将其目录解压缩到~/.vim。1.获取最新的 * textobj-line * 并将其目录解压缩到~/.vim。1.生成帮助标记:helptags ~/.vim/doc。1.使用插件管理器(推荐):只需按照插件管理器的常规安装过程进行操作,并且不要忘记安装 textobj-user 依赖项。
~/.vim
:helptags ~/.vim/doc
lxkprmvk3#
0v$ ^v$ 0vg_ ^vg_ $v0 $v^ g_v0 g_v^
所有的Map都是以不同的概念来执行工作的(从第一列或从第一个可打印字符,到最后一个字符或到最后一个可打印字符)。如果你喜欢,你可以创建一个自定义Map。请注意,在vim中通常不需要选择文本。
t40tm48m4#
再加上@glts的答案,你可以只使用vanilla vimMap来复制textobj-line插件的功能,而不需要安装插件。为此,请将以下内容添加到.vimrc
.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等命令可按预期方式工作。
yil
cil
06odsfpq5#
如果要将行复制到缓冲区中,可以使用Du,它将使用D删除从光标位置到行尾的内容,然后使用u恢复更改。文本将被复制到缓冲区中,而不带新行符号。
8xiog9wr6#
不完全是对你的问题的回答,但我想知道你是否可以跳过 * 选择 * 行,直接做你想要的下一步:
bt1cpqcv7#
您仍然可以Map到您想要的内容,例如:
nnoremap <leader>v 0v$
xxls0lw88#
另一个解决方案$将按照您的要求工作
:vnoremap $ $h
将原始$命令Map到新命令
8条答案
按热度按时间1qczuiv01#
是的,
g_
就是您要查找的内容。g_
与$
类似,但结尾处没有换行符。使用
0vg_
或^vg_
,分别取决于您是要从行首复制,还是要从行首的第一个字符复制。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 依赖项。
lxkprmvk3#
所有的Map都是以不同的概念来执行工作的(从第一列或从第一个可打印字符,到最后一个字符或到最后一个可打印字符)。如果你喜欢,你可以创建一个自定义Map。
请注意,在vim中通常不需要选择文本。
t40tm48m4#
再加上@glts的答案,你可以只使用vanilla vimMap来复制textobj-line插件的功能,而不需要安装插件。
为此,请将以下内容添加到
.vimrc
al
文本对象(“a line”的缩写)包括一行中的所有字符,但不包括终止换行符。这包括所有白色。il
文本对象(“inside line”的缩写)从第一个非空字符到最后一个非空字符。yil
、val
和cil
等命令可按预期方式工作。06odsfpq5#
如果要将行复制到缓冲区中,可以使用Du,它将使用D删除从光标位置到行尾的内容,然后使用u恢复更改。文本将被复制到缓冲区中,而不带新行符号。
8xiog9wr6#
不完全是对你的问题的回答,但我想知道你是否可以跳过 * 选择 * 行,直接做你想要的下一步:
bt1cpqcv7#
您仍然可以Map到您想要的内容,例如:
xxls0lw88#
另一个解决方案$将按照您的要求工作
将原始$命令Map到新命令