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

在VIM中选择整行,不带新行字符,vim,Vim,在VIM中选择整行而不使用新行字符的最短方法是什么 我知道SHIFT+v选择整行,但使用新行字符 要执行此操作,请转到该行,然后按: ^(将光标放在行首) v(启动视觉选择) $(选择整行,包括新行字符) 左(取消选择新行字符) 我也知道我可以制作一个这样的录音。但是我在问是否有任何内置的捷径…不,没有任何内置的捷径可以完成这项工作。这就是为什么人们甚至创建插件来满足需求 可能最流行的选择是。使用textobj line,您可以获得两个新的文本对象,al“一行”和il“内行”。那么 vi

在VIM中选择整行而不使用新行字符的最短方法是什么

我知道SHIFT+v选择整行,但使用新行字符


要执行此操作,请转到该行,然后按:

  • ^(将光标放在行首)
  • v(启动视觉选择)
  • $(选择整行,包括新行字符)
  • 左(取消选择新行字符)

我也知道我可以制作一个这样的录音。但是我在问是否有任何内置的捷径…

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

可能最流行的选择是。使用textobj line,您可以获得两个新的文本对象,
al
“一行”和
il
“内行”。那么

  • vil
    选择行的可打印内容(如
    ^vg
  • val
    选择整行内容(如
    0v$h
两者都不包括所选内容中的换行符

如果你问我的话,这个插件非常方便。它也与运营商合作


根据要求,安装:

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

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

nnoremap <leader>v 0v$
nnoremap v 0v$
所有人都使用不同的线概念(从第一列或第一个可打印字符到最后一个字符或最后一个可打印字符)来完成这项工作。如果愿意,可以创建自定义映射


请注意,在vim中选择文本通常是不必要的。

是的,
g
是您需要的
g
类似于
$
,但末尾没有换行符


使用
0vg
^vg
,具体取决于您是要从行首复制,还是从行上的第一个字符复制。

如果要将行复制到缓冲区中,您可以使用D从光标位置删除到行尾,然后使用u还原更改。文本将被复制到缓冲区,而不使用新行符号。因此,命令是:

Du

再加上@glts的答案,您可以只使用vanillavim映射复制插件的功能,无需安装插件

为此,将以下内容添加到
.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>
vnoremap al:normal 0v$h
omap al:正常val
vnoremap il:正常^vg_
omap il:正常vil
al
text对象(简称“一行”)包括一行中的所有字符,但不包括终止换行符。这包括所有空白

il
text对象(内行的缩写)从第一个非空字符到最后一个非空字符


诸如
yil
val
cil
等命令按预期工作

另一个解决方案$将按您的要求运行

:vnoremap $ $h

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

您可以包括安装步骤吗?下面的答案非常切题,并且满足了许多情况。这仍然会复制换行符,因为
$
在当前行的末尾包含换行符。下面的下划线非常有用。不知道>)谢谢:D
:help g_
g_
描述为“到行的最后一个非空字符和向下包含的[count-1]行”。帮助还说,
0
转到行的开头,而
^
转到行的第一个非空字符。因此,
^vg\
将从当前行的第一个非空字符到最后一个非空字符进行选择。我认为这应该是可接受的答案,因为OP要求的是“最短路径”,这使用的按键次数几乎与可接受的答案相同,不需要安装插件。我在我的
.vimrc
中将它映射为
noremap Y 0vg_Y
,所以现在我只需按
shift+Y
复制行而不复制新行。这太好了。默认的键绑定吃插件当早餐。这是疯狂的事后处理,但是你能扩展你所说的“在vim中选择文本通常是不必要的”吗?顺便说一句,谢谢你的回答。@PeterDolan,Vim有操作符、动作和文本对象,它们涵盖了很多常见的用例,所以选择通常是不必要的。例如,
dip
表示“删除此段落”,而
vipd
表示“选择此段落并删除”。前者比前者更短,更直观。如果想要提高Vim的使用效率,必须熟悉运算符和文本对象。Y使用新行字符执行复制相关问题:
:vnoremap $ $h