vim中的自动注释选定文本

时间:2017-04-07 16:27:01

标签: vim indentation

1)无论如何在一组行上而不是整个文件中自动添加/重新标记?

set shiftwidth=4
set expandtab
set tabstop=4 

已在我的.vimrc中定义。

我想要的是选择一堆行并仅对它们应用缩进。这是因为文件很大,我只想清理我的代码行。通过执行:retab,我必须强制整个文件重新缩进。

例如,选择以下代码并自动重新登记

def hello(self):
 line1
 line2

def hello(self)
    line1
    line2

2)有什么方法可以反转标签吗?类似于Eclipse中的Shift-Tab。它可以追溯到4个空格。

4 个答案:

答案 0 :(得分:1)

  

我想要的是选择一堆行并仅对它们应用缩进

您可以在可视模式下对某些行应用缩进。为此,请按照以下步骤操作:

  1. 将光标置于要缩进的第一行

  2. 输入 shift + v

  3. 进入视觉模式
  4. 向下移动,输入 j ,直到到达最后一行缩进(或者你可以输入 line# + G 如果你知道要缩进的最后一行的行号。)

  5. 输入>

  6. 另一个解决方案是在命令行模式下使用正则表达式执行此操作:

    2,5s/\v(.*)/\t\1/g

    这里的行范围是在正则表达式的前两个数字中指定的(在本例中是从第2行到第5行)。

答案 1 :(得分:0)

要同时回答您的两个问题,您可以使用><运算符。由于它们是运算符,它们的行为就像ydc以及所有其他运算符一样,因此您必须为它们提供运动。例如,>>将缩进当前行(包含4个空格),>j将缩进当前行下面的行。 >G会将所有内容缩进到缓冲区的末尾等。

同样地,<将取消您指定的任何内容。

在您的具体示例中,我建议使用两种不同的方法。

  1. 使用普通模式。这有点取决于你的功能有多大。如果它只是两行,您可以将光标放在 line1 上,然后键入<j>,。 (当然,如果你的功能超过2行,你需要调整)。不幸的是,你需要在重新投入之前取消注意,否则你最终会得到5个空格,我认为你不想这样做。

  2. 使用视觉模式。除非您修改.vimrc,否则此方法会稍微不方便,因为在视觉模式下调用><会放弃您的视觉选择。这就是为什么我在.vimrc中有以下内容:

    "Make it easier to indent a visual selection several times.
    xnoremap > >gv
    xnoremap < <gv
    

    使用此设置,您可以直观地选择要重新连接的行,然后执行<>。 IMO,这是最好的解决方案,我经常使用这种工作流程。

答案 2 :(得分:0)

大多数(如果不是全部)Ex命令采用一个范围,因此您可以直观地选择行并执行:'<,'>retab

:12,16retab

:.,+9retab

等等。

请参阅:help :retab:help :range

答案 3 :(得分:0)

你可以试试这个...

Shift + V 进入可视模式

然后按 j 直到找到您想要识别的文本。

最后按 =,它会自动识别您选择的代码。

如果您想识别整个代码,只需输入 gg=G