插入单个字符重新映射

时间:2013-07-04 21:48:33

标签: vim command-line remap

我有一个在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

2 个答案:

答案 0 :(得分:5)

将每个nmap更改为nnoremap,将每个imap更改为inoremap,然后查看问题是否仍然存在。

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

完整阅读:h 40.1

阅读以艰难的方式学习Vimscript 中的chapter on "Strict mapping"

答案 1 :(得分: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突出显示组的尾随空格。
  4. 请确保删除以下列方式之一突出显示的所有不需要的尾随空格。我个人更喜欢第一个。