Answers:
由于vim使用百分号引用当前缓冲区,因此您可以使用它快速获取所有内容。
:%y
将拉动整个缓冲区,
:%y+
并将其拉动到+
寄存器(假设vim是使用正确的选项编译的,则可能是剪贴板)。
:%d
并将:%d+
删除操作相同。
在每种情况下,光标都保持在原位。
C-o
两次即可返回。
另一种解决方案是使用名为vim-textobj-entire的插件。默认情况下,此插件为ae
整个缓冲区ie
以及整个缓冲区(前导空行和尾随空行)提供文本对象。
该插件取决于同一作者的vim-textobj-user,它使用户可以舒适地定义任何文本对象。有许多插件可以很好地利用此功能。
默认情况下,整个文件没有文本对象,但是可以使用创建它们omap
。在这种情况下,它将看起来像这样:
onoremap f :<c-u>normal! mzggVG<cr>`z
以下是其工作方式的细分:
onoremap f " make 'f' the text object name
:<c-u> " use <c-u> to prevent vim from inserting visual selection marker at the beginning of the command automatically.
normal! " use normal to make key presses ignoring any user mappings
mzggVG<cr>`z " make a marker in register z, select the entire file in visual line mode and enter the normal command, and go back to the z marker
笔记:
Ctrlu可以在命令行模式下使用,以删除光标位置左侧的所有内容。这样做的原因是,如果您直接从可视模式输入命令行,它将自动插入'<,'>
命令行,而这不是我们想要的。我还建议您使用以外的其他字符f
,因为f
通常用于移动到该行上的下一个搜索字符。例如,fi
将转到i
当前行的下一个。
相关帮助主题:
:help omap-info
:help :normal
:help c_CTRL-U
:help v_:
``
在末尾添加a 将使光标返回到先前的位置。
mmgg"+yG`m
,却从未想到过。谢谢,这在.vimrc中是正确的。