2013-07-04 50 views
0

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

无论何时我按kj,vim都会在我的光标前面插入一个_,然后改变我按下空间的方式。我无法弄清楚为什么这些事情是这样相互作用的。有人可以澄清一些事情吗?我很感激。

这是我整个的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 

回答

5

改变每nmapnnoremapimapinoremap,看看问题是否仍然存在。

检查您没有任何尾随空白。

全文阅读:h 40.1

阅读chapter on "Strict mapping"了解Vimscript的艰难之路

+0

每个Vim用户都应该阅读那本书。即使你不打算编写Vimscript,你也会学到更多关于如何有效使用Vim的知识。正如Steve Losh所说,应该始终使用'-noremap'变体。 – d11wtq

+0

这样做,谢谢!我将把这本书加入我的清单。 – Brandon

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突出显示组的尾部空白。

确保您删除所有通过以下某种方法突出显示的不需要的尾部空白。我个人比较喜欢第一个。