在 Vim 中使用 latex-suite 映射 <C-j> 的问题
Posted
技术标签:
【中文标题】在 Vim 中使用 latex-suite 映射 <C-j> 的问题【英文标题】:Trouble mapping <C-j> in Vim with latex-suite 【发布时间】:2012-01-08 10:02:35 【问题描述】:我想映射<C-j>
以切换到当前窗口下方的下一个窗口
map <C-j> <C-w>j
但是,它会进入插入模式,而不是移动下面的窗口。为什么?
尝试的解决方案:
我安装了latex-suite
。所以我尝试查询<C-j>
映射到什么
:map <C-j>
我得到以下输出:
v <NL> <Plug>IMAP_JumpForward
n <NL> <Plug>IMAP_JumpForward
o <NL> <C-W>j
这意味着我应该更改<Plug>IMAP_JumpForward
的映射。我阅读了一下,发现它与 <++>
占位符有关,您可以在插入模式下使用 <C-j>
跳转到。因此,根据我的阅读,我了解到我可以使用 .vimrc
中的以下行更改映射:
imap <C-space> <Plug>IMAP_JumpForward
但不,它不像 <C-j>
过去那样工作。我会尽力说明。我输入以下内容(_
代表光标):
\documentclass_
然后我得到
\documentclass_<++>
然后我尝试输入一些文字
\documentclassarticle_<++>
所以现在我按<C-space>
。这就是发生的事情:它退出插入模式,我将处于以下情况:
\documentclassarticl_e<++>
问题总结:
map <C-j> <C-w>j
之后,<C-j>
进入插入模式。
在imap <C-space> <Plug>IMAP_JumpForward
之后,<C-space>
不会跳转到下一个<++>
占位符。它退出插入模式,光标后退一个字符。
怎么了?我错过了什么?
【问题讨论】:
【参考方案1】:我建议两件事:
首先,定位映射:
nnoremap <C-j> <C-w>j
其次,通过执行找出哪些映射会干扰(以及它们来自何处)
verbose nmap <C-j>
verbose nmap <C-w>
verbose nmap j
另请参阅:map
、:imap
、:vmap
、:noremap
等。
【讨论】:
verbose map <C-j>
说它是从~/.vim/plugin/imaps.vim
设置的。正确的。我认为.vimrc
是最后一个脚本?为什么imaps.vim
在.vimrc
中覆盖我的nnoremap
s?【参考方案2】:
我也遇到过同样的问题;对我来说,它的行为很奇怪,因为来自 vim-latex 的 <C-j>
被映射为正常的视觉和插入模式。在看到这个答案并检查 '\bundle\vim-latex\plugin' 目录中的 'imaps.vim' 文件后,我有种感觉。我将以下代码放在我的 vimrc 中,它似乎可以工作。
imap <C-space> <Plug>IMAP_JumpForward
nmap <C-space> <Plug>IMAP_JumpForward
vmap <C-space> <Plug>IMAP_JumpForward
【讨论】:
我遇到的唯一对我有用的解决方案。谢谢! :)【参考方案3】:我在这里找到了解决方案:How to debug vim mapping overlaps?
你应该使用
nnoremap <SID>I_won’t_ever_type_this <Plug>IMAP_JumpForward
所以 vim-latex 的 imaps.vim 不会重新映射。通过映射到更好的东西,您仍然可以拥有该功能。
【讨论】:
以上是关于在 Vim 中使用 latex-suite 映射 <C-j> 的问题的主要内容,如果未能解决你的问题,请参考以下文章