将标签重新定义为4个空格

Ric*_*cky 1041 vim

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

Lau*_*ves 1531

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

根据您的答案,以下设置之一应该适合您:

要使上述设置永久添加到您的vimrc.

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

tabstop

在"空格"中测量的硬tabstop的宽度 - 实际上是实际制表符的(最大)宽度.

shiftwidth

"缩进"的大小.它也是在空格中测量的,所以如果你的代码库用制表符缩进,那么你想要shiftwidth等于制表符的次数tabstop.这也被搞什么=,><命令.

softtabstop

将此值设置为非零值tabstop将使Tab键(在插入模式下)插入空格组合(以及可能的选项卡)以模拟此宽度处的制表位.

expandtab

启用此选项将使Tab键(在插入模式下)插入空格而不是制表符.这也会影响retab命令的行为.

smarttab

启用此选项将使tab键(在插入模式下)插入空格或制表符,以便当光标位于行的开头时(即前面的唯一字符是空格),转到下一个tabstop的下一个缩进.

有关这些中的任何内容的更多详细信息,请参阅vim(例如):help 'optionname':help 'tabstop'

  • @Undefined这是系统vim设置.`〜/ .vimrc`是用户的vim设置.大多数人只保留系统设置,只需编辑用户设置.请注意,在大多数系统上创建它之前,`〜/ .vimrc`将不存在. (28认同)
  • 确保Makefile始终使用硬标签字符也很重要,否则构建将失败!我已经在http://stackoverflow.com/questions/234564/tab-key-4-spaces-and-auto-indent-after-curly-braces-in-vim/21323445#21323445上展示了如何操作 (16认同)
  • Vim用户注意到`set softtabstop = 4`功能!我厌倦了尝试使用`less`或除了'vim`之外的任何其他编辑器来阅读你的代码,只是为了看到古怪的缩进,因为你重新定义了tab是一些任意数量的空格(即使系统的其余部分不这样认为) !:-) (4认同)
  • 有人可以帮助我理解为什么这个答案说要对包含** 4 **个空格的缩进使用`tabstop = 8`吗?阅读各种设置的说明后,我找不到原因。另一个答案是说使用“ tabstop = 4”,这对我来说更有意义。 (4认同)
  • @ OgrePsalm33就个人而言,编辑代码时我总是启用`tabstop = 8`和`expandtab`.然而,不是每个人都有这种感觉.有些人认为缩进应该是单个制表符,因此宽度可由读者调整.我不认为这些人完全(甚至大多数)是vim用户...... (3认同)
  • @KodosJohnson`tabstop`选项控制硬制表符的宽度。如果希望缩进由4个空格字符组成,而不是由4个宽的单个制表符组成,则制表符的宽度无关紧要-* sort *。实际上,您可能希望制表符的宽度与缩进的宽度“不同”,以便减少制表符伪装成适当的缩进的机会。(`list` +`expandtab`也可以提供帮助)此外,8字符宽的选项卡是“标准”-您的终端,Python和许多其他工具默认为8字符宽的选项卡。 (3认同)
  • @SethMcClaine 我的在 /etc/vim/vimrc 中。 (2认同)
  • “制表符”和“缩进”有什么区别? (2认同)
  • @NikoBellic 制表符是 ASCII/Unicode 字符编号 9,又名“Control-I”。这是按 Tab 键时通常插入的字符。缩进是行开头使用的间距,在代码中通常用于指示块结构。一些编码约定使用制表符进行缩进(通常 1 个制表符 = 1 个缩进),但许多使用空格字符而不是制表符(4 个空格似乎最常见,但 2 个空格也相当流行)。 (2认同)
  • @dlaehnemann 如果您希望能够发现意外的制表符,您可能会发现 'list' 和 'listchars' 选项很有用。像`set list listchars+=ltab:▶┈` 之类的东西会使制表符看起来与空格不同。您可以使用“SpecialKey”高亮组进一步调整外观。另一个*真正*让它们脱颖而出的技巧是做类似`:2match Error /\t/`的事情。 (2认同)

Ala*_*avi 724

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

$ vim ~/.vimrc
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

  • 还有一件事,使用`:retab`将现有的`tab`转换为`space`。http://vim.wikia.com/wiki/Converting_tabs_to_spaces (3认同)

zen*_*zen 53

或者是vim modeline的简写:

vim :set ts=4 sw=4 sts=4 et :
Run Code Online (Sandbox Code Playgroud)


Sno*_*ash 25

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

" size of a hard tabstop
set tabstop=4

" always uses spaces instead of tab characters
set expandtab

" size of an "indent"
set shiftwidth=4
Run Code Online (Sandbox Code Playgroud)

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

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


ken*_*orb 21

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

所以这里有方便的功能,可以在你的~/.vimrc文件中定义:

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
Run Code Online (Sandbox Code Playgroud)

用法:

:call UseTabs()
:call UseSpaces()
Run Code Online (Sandbox Code Playgroud)

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

au! BufWrite,FileWritePre *.module,*.install call UseSpaces()
Run Code Online (Sandbox Code Playgroud)

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


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

" virtual tabstops using spaces
set shiftwidth=4
set softtabstop=4
set 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
Run Code Online (Sandbox Code Playgroud)

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


Ela*_*hts 14

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

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

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

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

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

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

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

资源:

  • 这很好,但你应该注意到这是vim中的http://vimdoc.sourceforge.net/htmldoc/options.html#'tabstop'或`:help tabstop`的逐字记录. (3认同)

Daw*_*ong 9

还有一件事,用于
:retab
将现有转换tabspaces http://vim.wikia.com/wiki/Converting_tabs_to_spaces


o0o*_*o0o 7

我的基本 ~/.vimrc 与评论:

set number " show line number                                                                                           
set tabstop=2 " set display width of tab; 1 tab = x space with                                                           
set expandtab " transform tab to x space (x is tabstop)                                                               
set autoindent " auto indent; new line with number of space at the beginning same as previous                                                                      
set shiftwidth=2 " number of space append to lines when type >> 
Run Code Online (Sandbox Code Playgroud)


Alo*_*hor 6

添加一行
set ts=4

~/.vimrc文件中每用户

/etc/vimrc文件系统广