vim - 跳转到键映射定义末尾的 2 个位置
问题描述
我正在尝试修改 vim 配置文件,以便将所有内容复制到系统剪贴板中。问题是,使用以下代码,光标移动到第一行,我想回到运行它之前的位置。
" copy all to the clipboard
nnoremap <Leader>a ggVG"+y
我已经查看了文档,具体是在:help :jumps
但我不知道如何更改之前的代码以跳转到跳转列表中的位置 2,以便放在我运行它时的同一行中。
解决方案
保持光标位置
您可以将CTRL-O
命令(as <C-o>
)添加到您的映射(支持 a [count]
),或者对于最后一个跳转位置只需使用``
,正如@Kent 回答的那样。
维护视图
这些跳转将保持您的光标位置,但仍可能影响窗口内当前显示的内容(也称为视图),因为跳转只是确保目标可见。幸运的是,Vim 具有保存和恢复完整视图的功能:winsaveview()
和winrestview()
. 不幸的是,它们在简单的映射中使用起来很麻烦(因为您需要一个变量来存储视图)。
anwolib插件提供了一个方便的:KeepView {cmd}
命令,使这种方式更容易:
nnoremap <Leader>a :KeepView normal! ggVG"+y<CR>
扬克替代品
您实际上不需要为此使用视觉选择;:yank
Ex 命令是一个方便的选择。幸运的是(根据您的要求),它根本不会改变光标位置,所以您只需要这个:
nnoremap <Leader>a :%yank +<CR>
推荐阅读
- javascript - Javascript 将 obj 数组与另一个数组映射以获取不同的键值
- html - HTML 文件 src/链接文件路径不起作用
- java - 如何在不使用数组的情况下将多个项目添加到 ArrayList
- javascript - 将带有斜杠的 JSON 对象存储到 Javascript 对象中
- azure - 使用延续令牌从 DocumentDb 获取文档
- python - TensorFlow NaN 仅在恢复模型时输出
- php - PHP:如何检查 CHMOD 模式是否有效?
- c++ - 用于使用 tesseract 和 opencv 的 cMakefile
- typescript - 对文件夹中的所有文件运行 tsc
- javascript - 当通过 GTM 实现 GA 并且浏览器不支持任何扩展时,如何启用 analytics_debug.js?