我当前的设置假定为8个空格; 我该如何重新定义它?
我当前的设置假定为8个空格; 我该如何重新定义它?
这取决于你的意思。你是想要:
根据你需要的行为,下面两组设置之一应该可以解决问题:
set tabstop=4
如果您的代码需要使用实际制表符,这些设置可以防止不经意地插入空格(这些是默认值,但您可能希望进行防御性设置):
set softtabstop=0 noexpandtab
如果你也想使用制表符进行缩进,你应该将shiftwidth
设置为与tabstop
相同:
set shiftwidth=4
如果你想让按下tab键时缩进4个空格,请将以下设置添加到你的vimrc文件,以使其永久生效:
set shiftwidth=4 smarttab
如果你希望 vim 只使用空格字符而不是制表符:
set expandtab
最后,我还建议将制表位设置为与缩进宽度不同,以减少制表符被误认为是正确缩进的机会:
set tabstop=8 softtabstop=0
为了使这些设置永久生效,请将它们添加到您的vimrc文件中。
更多详情:
- `tabstop`:硬制表符的宽度,用“空格”表示-实际上就是实际制表符字符的(最大)宽度。
- `shiftwidth`:缩进大小,也用空格测量。如果您的代码库使用制表符字符进行缩进,则需要将`shiftwidth`设置为制表符数乘以`tabstop`的数量。这也用于像`=``>`和`<`命令之类的东西。
- `softtabstop`:将其设置为非零值(而不是`tabstop`)将使Tab键(在插入模式下)插入一些空格(和可能的制表符),以模拟此宽度处的制表符停止位。
- `expandtab`:启用此选项将使Tab键(在插入模式下)插入空格而不是制表符字符。这也会影响`retab`命令的行为。
- `smarttab`:启用此选项将使Tab键(在插入模式下)插入空格或制表符,以便在光标位于行开头时(即只有前导空白字符时)跳到下一个制表符停止位的下一个缩进。set softtabstop=4
功能!我已经厌倦了尝试用less
或除vim
以外的任何编辑器阅读您的代码,只看到因为您重新定义制表符为某个任意数字而出现的奇怪缩进(尽管系统的其他部分认为不同)! :-) - Ogre Psalm33tabstop=8
和expandtab
。不过,并非每个人都这样想。有些人认为缩进应该是一个制表符字符,这样宽度就可以由读者自行调整。我认为这些人并非仅限于(甚至大多数情况下都不是)vim用户... - Laurence Gonsalvestabstop=8
?阅读了各种设置的说明后,我还是不明白原因。另一个答案建议使用tabstop=4
,这对我来说有点更有意义。 - Cave Johnsontabstop
选项控制硬制表符的宽度。如果你想让你的缩进由4个空格字符组成,而不是单个4字符宽的制表符,则制表符宽度并不重要--某种程度上来说。实际上,你可能希望你的制表符宽度与缩进宽度* 不同 *,以减少制表符伪装成正确缩进的机会。(list
+ expandtab
也可以帮助解决问题)另外,8字符宽的制表符是“标准”的——你的终端、Python和许多其他工具默认使用8字符宽的制表符。 - Laurence Gonsalves为了对当前用户永久定义此项,请创建(或编辑).vimrc
文件:
$ vim ~/.vimrc
然后,将下面的配置粘贴到文件中。一旦重新启动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
:retab
将现有的 tab
转换为 空格
。http://vim.wikia.com/wiki/Converting_tabs_to_spaces - DawnSong或者是vim模型行的速记方式:
vim :set ts=4 sw=4 sts=4 et :
有一些设置定义了是否使用空格或制表符。
因此,以下是方便的函数,可在您的~/.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
使用方法:
:call UseTabs()
:call UseSpaces()
要按文件扩展名使用它,可以使用以下语法(添加到.vimrc
):
au! BufWrite,FileWritePre *.module,*.install call UseSpaces()
另请参阅:将制表符转换为空格。
以下是来自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
它可以使用4个空格代替每个制表符,并映射到F9以切换设置。
我复制并粘贴了这段文字到我的 .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
第一种和第二种设置意味着当我按Tab键时,我会得到4个空格。第三种设置意味着当我执行V>
(即可视化并缩进)时也会得到4个空格。始终将'tabstop'设置为8,将'softtabstop'和'shiftwidth'设置为4(或3或您喜欢的任何数字),并使用'noexpandtab'。然后Vim将使用制表符和空格的混合,但键入<Tab>和键入空格时会像每4个(或3个)字符出现一个制表符。
注意:将'tabstop'设置为除8以外的任何值都可能使您的文件在许多地方(例如打印时)显示错误。
将'tabstop'和'shiftwidth'设置为您喜欢的任何值,并使用'expandtab'。这样,您将始终插入空格。当'tabstop'更改时,格式不会被破坏。
将'tabstop'和'shiftwidth'设置为您喜欢的任何值,并使用|modeline|来设置这些值以再次编辑文件时使用。仅在使用Vim编辑文件时有效。
始终将'tabstop'和'shiftwidth'设置为相同的值,并使用'noexpandtab'。这应该对人们使用的任何'tabstop'设置(仅适用于初始缩进)起作用。如果这样做,第一个非空插入后的制表符将变成空格,则可能很好。否则,当'tabstop'更改时,对齐的注释将出错。
来源:
:help tabstop
在个人用户的~/.vimrc
文件中,或者在系统范围内的/etc/vimrc
文件中添加以下行:
set ts=4
下面是带注释的基础 ~/.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 >>