插入单个字符重新映射
问题描述:
我有一个系统在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
答
改变每nmap
到nnoremap
每imap
到inoremap
,看看问题是否仍然存在。
检查您没有任何尾随空白。
全文阅读:h 40.1
。
阅读chapter on "Strict mapping"在了解Vimscript的艰难之路。
答
您的映射中可能会出现尾随空白。除了将*map
更改为*noremap
之外,像@glts建议的那样,它可能会改变从插入文本等行为到仅将光标向前移动一个位置(默认行为为空格)的行为,并且应该由@glts引用的链接解释的另一个原因完成你应该做以下的一个突出尾部空格:
-
set list listchars+=trail:-
:这将在地方尾部空格的秀特别强调-
。 - 跑步搜索:
/ $<CR>
(/
,<Space>
,$
,<CR>
)。 - 使用
match
运行搜索(可以放在vimrc中):let g:trailing_match_nr=matchadd('Error', '\s\+$')
:这将突出显示带有Error
突出显示组的尾部空白。
确保您删除所有通过以下某种方法突出显示的不需要的尾部空白。我个人比较喜欢第一个。
每个Vim用户都应该阅读那本书。即使你不打算编写Vimscript,你也会学到更多关于如何有效使用Vim的知识。正如Steve Losh所说,应该始终使用'-noremap'变体。 – d11wtq
这样做,谢谢!我将把这本书加入我的清单。 – Brandon