如何在Vim中插入真实的制表符?


78

当我在这里有vimrc时:

set tabstop=2
set shiftwidth=2
set softtabstop=2
set expandtab
set smarttab

而且我已经安装了supertab插件。每当我处于插入模式时,我都按Tab键,它会显示自动完成功能,但有时我想在字符串文字中插入一个真实的Tab字符,例如 所以我的意思是,每当我在双引号字符串文字中按tab时,它都应该输入一个真实的tab字符。

Answers:


139

在插入模式或命令模式下(:编辑器底部的提示),键入CTRL+V然后TAB

使用CTRL+V表示Vim应该从字面上接受下一个字符。即使在插入模式下。

更新:

如Herbert Sitz所述,如果gVim处于Windows模式(默认),则必须使用CRTL+Q代替CTRL+ V


2
就是这样,但是在Windows上,如果在vimrc中设置了Win兼容性(这是默认设置),则需要执行CTRL+ Qthen TAB
2011年

@Herbert Sitz:好点。我忘记了gVim的Windows模式。我也会注意这一点。
杰森·唐

CTRL + Q只是使我进入可视块模式,因此后续的TAB不会执行任何操作。我在这里想念什么吗?我的配置有问题吗?
本富兰克林

@BenFranklin必须处于最后一行模式(命令提示符在屏幕底部带有:)或处于插入模式,CTRL + V(或Q)才能按字面意义输入下一个字符。如前所述,当您处于默认命令模式时,它将使您进入阻止模式。
杰森·唐

4

@Samnang:我的设置与您相似;不幸的是,对我来说,杰森的答案没有用。

这是一种解决方法:

  • 在您想要使用标签的位置替换一些字符(例如,反引号:`)或字符(例如,唯一的字母数字字符串:zzz)
  • 选择文本(可视模式)并进行搜索/替换,

    :'s /`/ \ t / g

更新的答案受@ Cyryl1972的评论启发。

在所有行的开头插入制表符(另请注意:对于以下任何代码,无需选择行,因为该行包含在表达式的行匹配部分中):

:1,$s/^/\t\1/

在所有行的前10个字符后插入Inert标签:

:1,$s/^\(.\{10}\)/\1\t/

说明-第一部分:

:1,$      Match from line 1 to end of file
^(.{10}   Collect (preserve) all text from beginning of line to position 10
          (you need to escape the parentheses, \( and \), as well the FIRST
          (left) curly brace, only: \{ -- as it, { , appears to have special
          meaning in regex when used for this purpose

说明-第二部分:

/1        Add back the preserved text
\t        Insert a tab

...,并且该行的其余部分也会自动恢复。

当前行,仅:

:s/^/\t\1/

示例:在第2-4行的位置10(0索引)处插入制表符:

1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 
1234567890abcdefghij 

:2,4s/^\(.\{10}\)/\1\t/

1234567890abcdefghij 
1234567890  abcdefghij 
1234567890  abcdefghij 
1234567890  abcdefghij 
1234567890abcdefghij 

参考(StackOverflow):

参考文献(其他):


该解决方案也适用::1,$ s / ^(。)/ \ t \ 1 /(在所有行的第一个字符之前插入一个制表符)
Cyryl1972
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.