0

我有一个系统可以在我使用的 vim 中插入单个字符:nmap <Space> i_<Esc>r。但是,由于某种原因,这似乎干扰了我对逃生的重新映射。我重新映射了逃生:imap kj <Esc>

每当我 pushkj时,vim 都会在我的光标之前插入 a _,然后改变它就像我按下空格一样。我无法弄清楚为什么这些东西会像这样相互作用。有人可以对此事有所了解吗?我很感激。

这是我的整个 vimrc

"general settings
syntax on
filetype plugin on
set number
set smd
set ru

"Leader
let mapleader=','
nmap <Leader>w :w<Enter>
nmap <leader>e :wq<Enter>
nmap <leader>q :q!<Enter>

"remappings
nmap ; :
imap kj <Esc>
nmap <Space> i_<Esc>r

"au comands
au Filetype python source ~/.vim/scripts/python.vim
au Filetype ruby source ~/.vim/scripts/ruby.vim
au Filetype c source ~/.vim/scripts/c.vim
4

2 回答 2

5

更改每一个nmap,看看问题是否仍然存在。nnoremapimapinoremap

检查您是否没有任何尾随空格。

全文阅读:h 40.1

阅读Learn Vimscript the Hard Way中关于“严格映射”的章节。

于 2013-07-04T22:25:34.693 回答
2

您的映射中可能有尾随空格。除了更改*map*noremap像@glts 建议的那样,这可能会将行为从插入文本等更改为仅将光标向前移动一个位置(空格的默认操作),并且应该出于@glts 引用的链接中解释的另一个原因进行操作,您应该执行以下操作之一以突出显示尾随空格:

  1. set list listchars+=trail:-:这将特别突出显示-以代替尾随空格。
  2. 运行搜索:( / $<CR>, /, <Space>, $) <CR>
  3. match使用(可以放在 vimrc 中)运行搜索::这将使用高亮组let g:trailing_match_nr=matchadd('Error', '\s\+$')突出显示尾随空格。Error

确保删除通过其中一种方式突出显示的所有不需要的尾随空格。我个人更喜欢第一个。

于 2013-07-05T03:13:44.073 回答