我找到了一些较旧的帖子here,它们讨论了在vim中映射<C-j>快捷方式的困难,例如
map <C-j> <C-w>j由于latex-suite使用<C-j>在文本中向前跳转。我遇到了类似的情况,但我希望在编辑tex文件时保留latex-suite的常规快捷方式,并且只在编辑非tex文件时使用新的映射。我有点困惑为什么这不是默认行为-latex-suite的<C-j>快捷键在:map输出中显示为一个快捷键,即使我没有加载tex文件,并且其他快捷键(比如`a映射到\alpha)不起作用。我是否正确理解了,与大多数latex-suite的快捷方式不同,latex-suite中的这个<C-j>快捷方式会因为某些原因而不受文件类型的影响而加载?如果是这样的话,我如何使它只为tex文件加载,以便我可以将其他<C-j>映射用于非tex文件?
发布于 2021-07-24 17:37:12
对于该插件的维护者来说,唯一明智的解决方案是将其所有特定于文件类型的映射移动到ftplugin,这是它们所属的位置。他们目前的实现方式是好的实践(<Plug>)和坏的实践(全局文件类型特定的映射)的愚蠢组合,所有这些都在plugin/下的单个脚本中。这是非常糟糕的。
他们目前做的是:
" in plugin/imaps.vim
inoremap <silent> <Plug>IMAP_JumpForward <C-\><C-N>:call IMAP_Jumpfunc('', 0)<CR>
if !hasmapto('<Plug>IMAP_JumpForward', 'i')
imap <C-J> <Plug>IMAP_JumpForward
endif:help <Plug>映射,以便允许用户轻松编写自己的映射。IMAP_JumpForward应该放在括号里,:help hasmapto()守卫是一个“全局插件”。因此,无论它做什么,都是针对每个缓冲区和窗口执行的,而不是显式地限定到缓冲区或窗口。<C-j>映射只有在…中才有意义在使用latex套件插件时,在tex文件上下文中使用imaps.vim插件elsewhere.,则为
他们应该做的是:
" in plugin/imaps.vim
inoremap <silent> <Plug>(IMAP_JumpForward) <C-\><C-N>:call IMAP_Jumpfunc('', 0)<CR>
" in ftplugin/**/<somefile>.vim
imap <buffer> <C-J> <Plug>(IMAP_JumpForward)坦率地说,这件事的设计方式应该引起各种危险信号。我根本不做(la)tex,但https://github.com/lervag/vimtex似乎做得更好。
https://stackoverflow.com/questions/68504867
复制相似问题