vim 忽略 .vimrc 中提供的键盘映射

问题描述 投票:0回答:2

我有一个 .vimrc 文件(托管在 git-repo 中),包含以下键映射:

map <c-j> <c-w>j
map <c-k> <c-w>k
map <c-l> <c-w>l
map <c-h> <c-w>h

但最近,映射

<c-j>
停止工作,导致
<c-j>
更改为插入模式

我的 git-repository 没有显示任何更改,但

:map
命令返回:

o  <NL>          <C-W>j
   <C-K>         <C-W>k
   <C-L>         <C-W>l
   <C-H>         <C-W>h

可能是什么原因?

<NL>
代表什么?

  • vim 启动后执行
    :map <c-j> <c-w>j
    ,修复映射。
  • 执行
    noremap <c-j> <c-w>j
    并不能解决问题
  • 将映射移至 vimrc 文件末尾也会导致失败...

编辑1.0:

:verbose map <c-j>
返回:

v  <NL>          <Plug>IMAP_JumpForward
    Last set from ~/.vim/bundle/vim-latex-suite/plugin/imaps.vim
n  <NL>          <Plug>IMAP_JumpForward
    Last set from ~/.vim/bundle/vim-latex-suite/plugin/imaps.vim
o  <NL>          <C-W>j
    Last set from ~/.vimrc

编辑2.0:

禁用 vim-latex-suite 会使映射再次工作。但我怎样才能将两者结合起来呢?插件+映射?

vim
2个回答
2
投票

vim-latex-suite 插件会覆盖您的

<C-J>
映射。 (我不知道为什么它定义了一个全局映射;Latex 文件的缓冲区本地映射可能就足够了,但我不知道这个插件。)由于该插件提供
<Plug>
映射,因此很容易重新定义冲突的映射在您的
~/.vimrc
中,例如:

nmap <Leader>j <Plug>IMAP_JumpForward

:help key-notation
下,您会看到
<C-J>
<NL>
是等效的。也许控制键代码有特殊含义:

<NL>      linefeed        CTRL-J   10 (used for <Nul>)

0
投票

在 Solaris 11 上的 vim 上也有类似的问题

:map 
中写入的命令
./vim80/vimrc
已被忽略。这是代码:

map <Space>w :w!<CR>
map <Space>q :q!<CR>
map <Space>k Y
map <Space>v p

我用它来避免输入太多:
Space wShift : w Shift 的作用相同! 输入

解决方案是编写代码

not in vimrc but in defaults.vim

我仅在虚拟机上的 Solaris 11 上遇到此问题。其他 unix 发行版(例如 RedHat 或 Debian)以及 Windows 上的 vim 按预期工作,即使用 vimrc 中的 :map-code 。

© www.soinside.com 2019 - 2024. All rights reserved.