我有一个在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
答案 0 :(得分:5)
将每个nmap
更改为nnoremap
,将每个imap
更改为inoremap
,然后查看问题是否仍然存在。
检查您是否没有任何尾随空格。
完整阅读:h 40.1
。
阅读以艰难的方式学习Vimscript 中的chapter on "Strict mapping"。
答案 1 :(得分:2)
您可能在映射中有尾随空格。除了将*map
更改为*noremap
之外,像@glts建议这可能会改变插入文本的行为等等,只是将光标向前移动一个位置(默认空间动作),应该为另一个位置执行在@glts引用的链接中解释的原因,您应该执行以下操作之一以突出显示尾随空格:
set list listchars+=trail:-
:这将显示特别突出显示的-
,而不是尾随空格。/ $<CR>
(/
,<Space>
,$
,<CR>
)。match
运行搜索(可以放在vimrc中):let g:trailing_match_nr=matchadd('Error', '\s\+$')
:这会突出显示带有Error
突出显示组的尾随空格。请确保删除以下列方式之一突出显示的所有不需要的尾随空格。我个人更喜欢第一个。