我当前的设置假设 8 个空格;我怎么能重新定义它?
这取决于你的意思。您是否希望文件中的实际制表符显示为 4 个空格宽,或者“制表符”实际上是指通过按制表键生成的缩进,这将导致文件字面上包含(最多)4 个空格字符您键入的每个“标签”?
根据您的回答,以下一组设置应该适合您:
对于出现 4 个空格宽的制表符: set tabstop=4 如果您在源代码中使用实际的制表符,您可能还需要这些设置(这些实际上是默认值,但您可能需要防御性地设置它们): set softtabstop=0 noexpandtab 最后,如果你想让一个缩进对应单个制表符,你还应该使用:set shiftwidth=4
对于包含 4 个空格字符但使用 tab 键输入的缩进:set tabstop=8 softtabstop=0 expandtab shiftwidth=4 smarttab
要使上述设置永久化,请将这些行添加到您的 vimrc。
如果您需要进行调整,或者只是想了解这些选项的全部含义,以下是每个选项含义的细分:
tabstop 硬制表位的宽度,以“空格”衡量——实际上是实际制表符的(最大)宽度。 shiftwidth “缩进”的大小。它也是用空格来衡量的,所以如果你的代码库使用制表符缩进,那么你希望 shiftwidth 等于制表符的数量乘以制表符。这也被 =、> 和 < 命令之类的东西使用。 softtabstop 将此设置为非零值而不是 tabstop 将使制表键(在插入模式下)插入空格组合(可能还有制表符)以模拟此宽度的制表位。 expandtab 启用此选项将使制表键(在插入模式下)插入空格而不是制表符。这也会影响 retab 命令的行为。 smarttab 启用此选项将使制表键(在插入模式下)插入空格或制表符以在光标位于行首时转到下一个制表位的下一个缩进(即前面的唯一字符是空格)。
有关其中任何一项的更多详细信息,请参见 vim 中的 :help 'optionname'
(例如 :help 'tabstop'
)
要为当前用户永久定义此内容,请创建(或编辑).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
或 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()
另请参阅:Converting tabs to spaces。
以下是来自 Wikia 的另一个片段,可用于 toggle between tabs and spaces:
" 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
前 2 个设置意味着当我按 Tab 时,我得到 4 个空格。第三个设置意味着当我做 V>
(即视觉和缩进)时,我也会得到 4 个空格。
不像公认的答案那么全面,但它可能会帮助那些只想复制和粘贴内容的人。
将您想要的设置放在 ~/.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' 改变时对齐的注释会出错。
资源:
vimdoc.sourceforge.net/htmldoc/options.html#'tabstop'
:help 制表符
:help tabstop
逐字记录的。
还有一件事,使用
:retab
将现有 tab 转换为 空格 {1 }
为每个用户添加行
set ts=4
~/.vimrc
文件
或系统范围的
/etc/vimrc
文件
我的基本 ~/.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 >>
永久所有用户(当您独自在服务器上时):
# echo "set tabstop=4" >> /etc/vim/vimrc
在配置文件中追加设置。通常在新服务器 apt-get purge nano mc
和所有其他服务器上以节省您的时间。否则,您将在 git
、crontab
等中重新定义编辑器。
nano
中的 F10
究竟运行了什么,但我总是用保存做一些技巧(也许 F10
是一个解决方案)。或者它在 screen
中不起作用?不记得了,就是讨厌)
确保 vartabstop
未设置
set vartabstop=
将 tabstop
设置为 4
set tabstop=4
不定期副业成功案例分享
~/.vimrc
是用户的 vim 设置。大多数人不理会系统设置,只编辑用户设置。请注意,在您在大多数系统上创建~/.vimrc
之前,它不会存在。set softtabstop=4
功能!我厌倦了尝试使用less
或除vim
之外的任何其他编辑器来阅读您的代码,只是看到古怪的缩进,因为您将制表符重新定义为任意数量的空格(即使系统的其余部分不这么认为) ! :-)tabstop=8
来表示由 4 个空格组成的缩进吗?在阅读了各种设置的描述后,我无法得到原因。另一个答案说使用tabstop=4
这对我来说更有意义。tabstop
选项控制硬制表符的宽度。如果您希望缩进包含 4 个空格字符,而不是 4 宽的单个制表符,那么制表符的宽度无关紧要——有点。在实践中,您可能希望制表符宽度与缩进宽度不同,以减少制表符伪装成正确缩进的机会。 (list
+expandtab
在这里也可以提供帮助)此外,8 字符宽的标签是“标准”——您的终端、Python 和许多其他工具默认为 8 字符宽的标签。