我目前的设置是8个空格;我该如何重新定义它呢?


当前回答

很少有设置定义是使用空格还是制表符。

这里有一些方便的函数,可以在~/中定义。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来切换设置。

其他回答

这取决于你的意思。你的意思是:

您希望文件中的制表符显示为4个字符单元格宽? 您希望TAB键生成由4个空格字符组成的缩进

根据您需要的行为,以下设置之一应该工作:

如果你想要文件中的制表符显示为4个字符单元格宽:

set tabstop=4

如果你的代码需要使用实际的制表符,这些设置可以防止无意插入空格(这些是默认值,但你可能想要防御性地设置它们):

set softtabstop=0 noexpandtab

如果你还想使用制表符进行缩进,你还应该将shiftwidth设置为与tabstop相同:

set shiftwidth=4

要使这些设置永久存在,请将它们添加到vimrc中。

如果你想按tab键缩进4个空格字符:

首先,告诉vim使用4空格缩进,并智能地使用tab键进行缩进,而不是插入制表符(当在一行的开头时):

set shiftwidth=4 smarttab

如果你也想让vim只使用空格字符,而不是制表符:

set expandtab

最后,我还建议设置制表位与缩进宽度不同,以减少制表符伪装成适当缩进的机会:

set tabstop=8 softtabstop=0

要使这些设置永久存在,请将它们添加到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).

更多细节请参见:help 'optionname' in vim(例如:help 'tabstop')

我复制并粘贴到我的。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个空格。

不像公认的答案那么全面,但它可能会帮助那些只想复制和粘贴一些东西的人。

很少有设置定义是使用空格还是制表符。

这里有一些方便的函数,可以在~/中定义。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来切换设置。

永久为所有用户(当你独自在服务器上时):

# echo "set tabstop=4" >> /etc/vim/vimrc

在配置文件中追加设置。 通常在新服务器apt-get清除纳米mc和所有其他节省您的时间。否则,你将在git、crontab等中重新定义编辑器。

将您想要的设置放在~/。vimrc文件——请参阅下面的一些指导方针和最佳实践。

在Vim中使用标签有四种主要方式:

Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4 (or 3 or whatever you prefer) and use 'noexpandtab'. Then Vim will use a mix of tabs and spaces, but typing and will behave like a tab appears every 4 (or 3) characters. Note: Setting 'tabstop' to any other value than 8 can make your file appear wrong in many places (e.g., when printing it). Set 'tabstop' and 'shiftwidth' to whatever you prefer and use 'expandtab'. This way you will always insert spaces. The formatting will never be messed up when 'tabstop' is changed. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a |modeline| to set these values when editing the file again. Only works when using Vim to edit the file. Always set 'tabstop' and 'shiftwidth' to the same value, and 'noexpandtab'. This should then work (for initial indents only) for any tabstop setting that people use. It might be nice to have tabs after the first non-blank inserted as spaces if you do this though. Otherwise aligned comments will be wrong when 'tabstop' ischanged.

来源:

vimdoc.sourceforge.net/htmldoc/options.html #“制表符” :帮助制表符