Vim自定义JS跳转命令后,如何保留原文件的光标位置?
解决Vim中JavaScript自定义跳转命令的光标返回位置问题
你当前的自定义跳转映射如下:
autocmd FileType javascript nnoremap gd gd/from<CR>:noh<CR>5lgf
问题核心是:gd会把原光标位置存入跳转列表,但后续的/from、5l等操作会修改当前缓冲区的光标位置,导致用<C-o>返回时,跳转列表的顶部变成了导入语句行的位置,而非最初执行gd的位置。
:keepjump的作用就是让后续操作不更新跳转列表,刚好能解决这个问题。把那些改变当前缓冲区光标位置的操作包裹在:keepjump中即可,修改后的映射如下:
autocmd FileType javascript nnoremap gd :keepjump execute "normal! gd/from\<CR>:noh\<CR>5l"<CR>gf
改动说明:
- 用
:keepjump包裹gd之后到gf之前的所有移动、查找操作,确保这些操作不会覆盖gd记录的原位置。 - 使用
execute "normal! ..."是为了在Ex命令模式下执行完整的normal模式序列,其中<CR>需要转义为\<CR>才能被Vim正确解析。 - 最后的
gf单独执行,跳转到目标文件后,用<C-o>返回时,光标就会回到执行gd时的原位置。
内容的提问来源于stack exchange,提问作者moskalenko2k24
相关产品推荐
相关产品推荐

