Vim - 重新映射 >> 和 << (缩进命令)

10
我希望将 << 和 >> 映射为单个按键,以加快工作流程,但我找不到如何在我的 vimrc 中编写重新映射的信息。你有什么想法如何实现重新映射吗?

1
你真的想重新映射它们吗?在第一个缩进通过 >> 后,您可以按 . 重复该操作。这几乎和将其重新映射到单个按键一样好。 - Michael Berkowski
1
在可视模式下,单个的 <> 已经可以执行缩进操作了。 - Michael Berkowski
2
请注意,在插入模式下,按下CTRL-T和CTRL-D分别可以进行缩进和取消缩进。 - Benoit
1
@Michael,我知道,我真的很懒。整天按两次相同的键来启动缩进真的很累人(即使我用.重复它们)。我想下面的答案仍然可以每天为我节省数百个按键(是的,我处理那么多标记)。谢谢大家的建议! - tester
@测试人员,如果你正在处理大量的HTML或XML,并且发现自己不断地缩进代码,请确保你也使用=来修复缩进... - Michael Berkowski
是的,我确实这样做,更多的情况是当我遇到一个两行括号集时,我想要进行组织,高亮显示它们和==所需的工作量相同,就像>>这两行一样(如果只需要一个缩进,==将与>>相同)。你完全正确,很多HTML自动缩进都使用==。不过,在命令模式下,当它在其他模式下都是单个字符时,它必须是>>而不是>,这似乎总是有些奇怪。 - tester
3个回答

12

其他回答已经回答了您的直接问题。我只想建议您将其重新映射为正常模式和可视模式中的缩进和反缩进命令<Tab><Shift-Tab>(请确保在可视选择模式下添加gv以重新选择):

nnoremap <TAB> >>
nnoremap <S-TAB> <<
vnoremap <TAB> >gv
vnoremap <S-TAB> <gv

在插入模式中,你可能已经知道,你可以使用Ctrl-tCtrl-d来缩进/取消缩进。


当我使用这个按键绑定时,我无法通过按Esc键退出可视模式。有什么解决办法吗? - ivan0biwan

11

你可能正在寻找:noremap

:noremap > >>
:noremap < <<

如果您只使用:map,您当然会得到递归定义函数,这很有趣。 (^C将停止它。) :noremap变体不会递归扩展映射。


1

我认为这些是最自然的缩进键映射,适用于正常和视觉模式

" Normal mode  
nnoremap > >>
nnoremap < <<

" Visual mode
vnoremap < <gv
vnoremap > >gv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接