关于vim:将标签重新定义为4个空格


Redefine tab as 4 spaces

我目前的设置假设8个空格; 我怎么能重新定义它?


这取决于你的意思。您是否希望文件中的实际制表符显示为4个空格宽,或者"tab"是否实际上是指通过按Tab键生成的缩进,这将导致文件字面上包含(最多)4个空格字符你输入的每个"标签"?

根据您的答案,下列其中一组
设置应该适合您:

  • 对于出现4个空格宽的制表符:

    1
    set tabstop=4

    如果您在源代码中使用实际制表符,则可能还需要这些设置(这些实际上是默认设置,但您可能希望以防御方式设置它们):

    1
    set softtabstop=0 noexpandtab

    最后,如果您希望缩进对应于单个选项卡,您还应该使用:

    1
    set shiftwidth=4
  • 对于包含4个空格字符但使用Tab键输入的缩进:

    1
    set tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab

要使上述设置永久添加
这些行到你的vimrc。

如果您需要进行调整,或者只是想了解这些选项的含义,这里是每个选项的含义细分:

tabstop

The width of a hard tabstop measured in"spaces" -- effectively the (maximum) width of an actual tab character.

shiftwidth

The size of an"indent". It's also measured in spaces, so if your code base indents with tab characters then you want shiftwidth to equal the number of tab characters times tabstop. This is also used by things like the =, > and < commands.

softtabstop

Setting this to a non-zero value other than tabstop will make the tab key (in insert mode)
insert a combination of spaces (and possibly tabs) to simulate tab stops at this width.

expandtab

Enabling this will make the tab key (in insert mode) insert spaces instead of
tab characters. This also affects the behavior of the retab command.

smarttab

Enabling this will make the tab key (in insert mode) insert spaces or tabs to
go to the next indent
of the next tabstop when the cursor is at the beginning of a line (i.e. the
only preceding characters are whitespace).

有关其中任何一个的更多详细信息,请参阅vim中的:help 'optionname'(例如:help 'tabstop')


要为当前用户永久定义此项,请创建(或编辑).vimrc文件:

1
$ vim ~/.vimrc

然后,将下面的配置粘贴到文件中。重新启动vim后,将应用选项卡设置。

1
2
3
4
5
6
7
8
9
10
set tabstop=4      " The width of a TAB is set to 4.
                   " Still it is a \t. It is just that

                   " Vim will interpret it to be having

                   " a width of 4.


set shiftwidth=4   " Indents will have a width of 4

set softtabstop=4  " Sets the number of columns for a TAB

set expandtab      " Expand TABs to spaces


或者是vim modeline的简写:

1
vim :set ts=4 sw=4 sts=4 et :

我将其复制并粘贴到我的.vimrc文件中:

1
2
3
4
5
6
7
8
" size of a hard tabstop
set tabstop=4

" always uses spaces instead of tab characters

set expandtab

" size of an"indent"
set shiftwidth=4

前两个设置意味着当我按Tab键时我得到4个空格。
第三个设置意味着当我做V>(即视觉和缩进)时,我也得到4个空格。

不像接受的答案那么全面,但它可能会帮助那些只想要复制和粘贴的人。


几个设置定义是否使用空格或制表符。

所以这里有一些方便的函数,可以在你的~/.vimrc文件中定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function! UseTabs()
  set tabstop=4    " Size of a hard tabstop (ts).
  set shiftwidth=4 " Size of an indentation (sw).
  set noexpandtab  " Always uses tabs instead of space characters (noet).
  set autoindent   " Copy indent from current line when starting a new line (ai).
endfunction

function! UseSpaces()
  set tabstop=2    " Size of a hard tabstop (ts).
  set shiftwidth=2 " Size of an indentation (sw).
  set expandtab    " Always uses spaces instead of tab characters (et).
  set softtabstop=0" Number of spaces a <Tab> counts for. When 0, featuer is off (sts).
  set autoindent   " Copy indent from current line when starting a new line.
  set smarttab     " Inserts blanks on a <Tab> key (as per sw, ts and sts).
endfunction

用法:

1
2
:call UseTabs()
:call UseSpaces()

要按文件扩展名使用它,可以使用以下语法(添加到.vimrc):

1
au! BufWrite,FileWritePre *.module,*.install call UseSpaces()

另请参阅:将制表符转换为空格。

这是Wikia的另一个片段,可用于在制表符和空格之间切换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
" virtual tabstops using spaces
set shiftwidth=4
set softtabstop=4
expandtab
" allow toggling between local and default mode

function TabToggle()
  if &expandtab
    set shiftwidth=8
    set softtabstop=0
    set noexpandtab
  else
    set shiftwidth=4
    set softtabstop=4
    set expandtab
  endif
endfunction
nmap <F9> mz:execute TabToggle()<CR>'z

它允许为每个选项卡使用4个空格,并映射到F9以切换设置。


将您想要的设置放在?/ .vimrc文件中 - 请参阅下面的一些指南和最佳实践。

在Vim中使用选项卡有四种主要方法:

  • 始终将'tabstop'保持在8,将'softtabstop'和'shiftwidth'设置为4(或3或任何你喜欢的)并使用'noexpandtab'。然后Vim将使用选项卡和空格的混合,但键入并将表现为每4(或3)个字符出现一个选项卡。

    注意:将"tabstop"设置为除8以外的任何其他值可能会使您的文件在许多地方出现错误(例如,打印时)。

  • 将'tabstop'和'shiftwidth'设置为您喜欢的任何内容并使用'expandtab'。这样您将始终插入空格。当'tabstop'改变时,格式永远不会搞砸。

  • 将'tabstop'和'shiftwidth'设置为您喜欢的任何内容并使用| modeline |再次编辑文件时设置这些值。仅在使用Vim编辑文件时有效。

  • 始终将'tabstop'和'shiftwidth'设置为相同的值,并设置'noexpandtab'。这应该适用于人们使用的任何tabstop设置(仅适用于初始缩进)。如果你这样做的话,在第一个非空格作为空格插入后有标签可能会很好。否则,当'tabstop'被更改时,对齐的注释将是错误的。

  • 资源:

    • vimdoc.sourceforge.net/htmldoc/options.html#'tabstop"
    • :help tabstop


    还有一件事,请使用
    :retab
    将现有的tab转换为spaces
    http://vim.wikia.com/wiki/Converting_tabs_to_spaces


    添加行
    set ts=4

    每个用户的~/.vimrc文件
    要么
    系统范围的/etc/vimrc文件


    1
    :set sw=4

    请参阅掌握VI编辑器