键盘映射中的Vim怪异

时间:2009-08-27 21:13:43

标签: vim keymapping

我想插入空白行而不进入插入模式,我使用了这个键映射:

nomap go o <esc>

这确实会创建空白行,但会引入一些奇怪的行为。我有聪明的缩进和自动设置。新行遵循缩进但不删除它们,即使这样做会手动自动删除冗余空格。它还添加了每个光标所在的单个空格。

任何人都有任何见解来解释这种行为吗?

3 个答案:

答案 0 :(得分:5)

Vim 非常字面用你编写映射命令的方式 - 它实际上是在处理 <ESC> 之前映射中的空间。换句话说,您的映射执行此操作:

nnoremap go o<SPACE><ESC>

您应将其更改为:

nnoremap go o<ESC>

并确保映射中没有任何额外的空格!

答案 1 :(得分:0)

我同意“太多的PHP”。 这是我的.vimrc

的相关部分
nnoremap <A-o> o<ESC>k
nnoremap <A-O> O<ESC>j

我认为自从你将光标放回原始行后它会更快(虽然不在原始字符上)。

答案 2 :(得分:0)

像往常一样,vim wiki有一个有用的提示:Quickly adding and deleting empty lines。诀窍是在添加新行之前set paste,然后是set nopaste。此外,这将设置一个标记来记住光标位置并跳回到原来的位置。

nnoremap go :set paste<CR>m`o<Esc>``:set nopaste<CR>
nnoremap gO :set paste<CR>m`O<Esc>``:set nopaste<CR>