首页 > 解决方案 > 跳转到键映射定义末尾的 2 个位置

问题描述

我正在尝试修改 vim 配置文件,以便将所有内容复制到系统剪贴板中。问题是,使用以下代码,光标移动到第一行,我想回到运行它之前的位置。

" copy all to the clipboard
nnoremap <Leader>a ggVG"+y

我已经查看了文档,具体是在:help :jumps但我不知道如何更改之前的代码以跳转到跳转列表中的位置 2,以便放在我运行它时的同一行中。

标签: vim

解决方案


保持光标位置

您可以将CTRL-O命令(as <C-o>)添加到您的映射(支持 a [count]),或者对于最后一个跳转位置只需使用``,正如@Kent 回答的那样。

维护视图

这些跳转将保持您的光标位置,但仍可能影响窗口内当前显示的内容(也称为视图),因为跳转只是确保目标可见。幸运的是,Vim 具有保存和恢复完整视图的功能:winsaveview()winrestview(). 不幸的是,它们在简单的映射中使用起来很麻烦(因为您需要一个变量来存储视图)。

anwolib插件提供了一个方便的:KeepView {cmd}命令,使这种方式更容易:

nnoremap <Leader>a :KeepView normal! ggVG"+y<CR>

扬克替代品

您实际上不需要为此使用视觉选择;:yankEx 命令是一个方便的选择。幸运的是(根据您的要求),它根本不会改变光标位置,所以您只需要这个:

nnoremap <Leader>a :%yank +<CR>

推荐阅读