使用latex-suite在Vim中映射<Cj>

Kit*_*Kit 8 mapping vim latex

我想映射<C-j>切换到当前窗口下面的下一个窗口

map <C-j> <C-w>j
Run Code Online (Sandbox Code Playgroud)

但是,它进入插入模式而不是移动下面的窗口.为什么?

尝试解决方案

latex-suite安装了.所以我试着查询<C-j>映射到的内容

:map <C-j>
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

v  <NL>          <Plug>IMAP_JumpForward
n  <NL>          <Plug>IMAP_JumpForward
o  <NL>          <C-W>j
Run Code Online (Sandbox Code Playgroud)

这意味着我应该改变映射<Plug>IMAP_JumpForward.我仔细阅读了一下,发现它与插入模式中<++>可以跳转到的占位符有关<C-j>.所以,根据我的阅读,我了解到我可以使用以下行更改映射.vimrc:

imap <C-space> <Plug>IMAP_JumpForward
Run Code Online (Sandbox Code Playgroud)

但不,它不像以前那样有效<C-j>.我会试着说明一下.我输入以下内容(_表示光标):

\documentclass{}_
Run Code Online (Sandbox Code Playgroud)

然后我明白了

\documentclass{_}<++>
Run Code Online (Sandbox Code Playgroud)

然后我尝试输入一些文字

\documentclass{article_}<++>
Run Code Online (Sandbox Code Playgroud)

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

\documentclass{articl_e}<++>
Run Code Online (Sandbox Code Playgroud)

问题摘要:

  1. 之后map <C-j> <C-w>j,<C-j>进入插入模式.
  2. 之后imap <C-space> <Plug>IMAP_JumpForward,<C-space>不会跳到下一个<++>占位符.它退出插入模式,光标备份一个字符.

怎么了?我错过了什么?

seh*_*ehe 4

我建议两件事:

  1. 首先,定位映射:

    nnoremap <C-j> <C-w>j
    
    Run Code Online (Sandbox Code Playgroud)
  2. 其次,通过执行以下操作找出哪些映射会干扰(以及它们来自哪里)

    verbose nmap <C-j>     
    verbose nmap <C-w>
    verbose nmap j
    
    Run Code Online (Sandbox Code Playgroud)

另请参见:map:imap:vmap:noremap

  • `verbose map &lt;Cj&gt;` 表示它是从 `~/.vim/plugin/imaps.vim` 最后设置的。正确的。我认为 `.vimrc` 是最后一个获取的脚本?为什么 `imaps.vim` 会覆盖 `.vimrc` 中的 `nnoremap`? (3认同)