如何在vim的最左边插入?

时间:2014-11-19 11:22:07

标签: vim

想象一下,我正在vim中编辑此代码,并希望注释掉bar();行:

while (foo()) {
   bar();
   baz();
}

如果我在该行上按I#,我会明白:

while (foo()) {
   #bar();
   baz();
}

然而,我们的编码标准说我应该这样做:

while (foo()) {
#   bar();
   baz();
}

我可以通过按0i#代替(或者甚至将map I 0i放在我的.vimrc中以获得更永久的修复)来解决这个问题,但这对于.来说是不可重复的,因为它只是重复i而不是0i

许多其他编辑都有选择让Home不“聪明”,只是去第0列而不是尝试使用缩进。我试过搜索文档,但是已经写了一个空白 - 有没有办法在vim中这样做?

或者,是否有办法使绑定命令成为原子,以便用.重复它重复整个事情而不是绑定序列的最后一个命令?

由于

4 个答案:

答案 0 :(得分:4)

使用gI代替I

来自:help gI

                                                        gI                
gI                      Insert text in column 1 [count] times.  {not in Vi}    

答案 1 :(得分:3)

您正在寻找gI命令。在优秀而全面的帮助中,您会发现它位于:help I的条目下方。

答案 2 :(得分:1)

你真正想要的是评论插件,例如commentary(我使用的),Nerd CommenterEnhCommentifytComment,...,etc 。但是,据我所知,只有EnhCommentify可以选择是否支持缩进(g:EnhCommentifyRespectIndent)。

如果你已经有一个你喜欢的评论插件而且它不能按你喜欢的方式工作,我建议你通过插件的问题跟踪器打开一个问题并请求选项。

如果你想跳过这个插件,你可以使用这些由评论启发的快速n'脏映射:

nnoremap <expr> gcc getline('.') =~ '^#' ? '0"_xw' : "gI#\<esc>w"
xnoremap <expr> gc ':norm! ' . (getline("'<") =~ '^#' ? '0"_x' : "gI#") . "\<cr>"

答案 3 :(得分:0)

使用主页键转到该行的开头,然后插入