使用latex-suite </c-j>在Vim中映射<c-j>

时间:2011-11-29 00:49:27

标签: vim latex mapping

我想映射<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{_}<++>

然后我尝试输入一些文字

\documentclass{article_}<++>

现在我按<C-space>。这是发生的事情:它退出插入模式,我将处于以下情况:

\documentclass{articl_e}<++>

问题摘要:

  1. map <C-j> <C-w>j后,<C-j>进入插入模式。
  2. imap <C-space> <Plug>IMAP_JumpForward之后,<C-space>不会跳转到下一个<++>占位符。它退出插入模式,光标备份一个字符。
  3. 什么事?我错过了什么?

3 个答案:

答案 0 :(得分:4)

我建议两件事:

  1. 首先,定位映射:

    nnoremap <C-j> <C-w>j
    
  2. 其次,通过

    找出映射干扰的内容(以及它们来自何处)
    verbose nmap <C-j>     
    verbose nmap <C-w>
    verbose nmap j
    
  3. 另请参阅:map:imap:vmap:noremap等。

答案 1 :(得分:2)

我在这里找到了解决方案:How to debug vim mapping overlaps?

你应该使用

nnoremap <SID>I_won’t_ever_type_this <Plug>IMAP_JumpForward

因此imaps.vim或vim-latex不会重新映射。您仍然可以通过映射到更好的方式来获得功能。

答案 2 :(得分: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