vim中的制表符和空格
时间:2020-03-05 18:55:18 来源:igfitidea点击:
启用自动缩进后,如何防止vim用制表符替换空格?
一个例子:如果我在行的开头有两个制表符和7个空格,并且tabstop = 3
,然后按Enter键,那么下一行在开头有四个制表符和1个空格,但是我不希望这样……。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
解决方案
回答
也许这可以?
Standard vi interprets the tab key literally, but there are popular vi-derived alternatives that are smarter, like vim. To get vim to interpret tab as an ``indent'' command instead of an insert-a-tab command, do this: set softtabstop=2
回答
根本不使用标签页可能是个好主意。
:set expandtab
如果要将文件中的所有选项卡替换为3个空格(看起来类似于tabstop = 3
):
:%s/^I/ /
(其中" ^ I"是" TAB"字符)
从VIM联机帮助中:
'tabstop' 'ts' number (default 8) local to buffer Number of spaces that a <Tab> in the file counts for. Also see |:retab| command, and 'softtabstop' option. Note: Setting 'tabstop' to any other value than 8 can make your file appear wrong in many places (e.g., when printing it). There are four main ways to use tabs in Vim: 1. 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 <Tab> and <BS> will behave like a tab appears every 4 (or 3) characters. 2. 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. 3. 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. 4. 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' is changed.
回答
这是我的.vimrc
的一部分:
set autoindent set expandtab set softtabstop=4 set shiftwidth=4
这对我来说效果很好,因为我绝对不希望在源代码中使用制表符。从问题看来,我们确实希望在下一行保留两个制表符和七个空格,而且我不确定是否有一种方法可以教vim适应这种风格。
回答
all I want is the autoindented line to have exactly the same indentation characters as the previous line.
'copyindent' 'ci' boolean (default off); local to buffer; {not in Vi} Copy the structure of the existing lines indent when autoindenting a new line. Normally the new indent is reconstructed by a series of tabs followed by spaces as required (unless 'expandtab' is enabled, in which case only spaces are used). Enabling this option makes the new line copy whatever characters were used for indenting on the existing line. If the new indent is greater than on the existing line, the remaining space is filled in the normal manner. NOTE: 'copyindent' is reset when 'compatible' is set. Also see 'preserveindent'.
'preserveindent' 'pi' boolean (default off); local to buffer; {not in Vi} When changing the indent of the current line, preserve as much of the indent structure as possible. Normally the indent is replaced by a series of tabs followed by spaces as required (unless 'expandtab' is enabled, in which case only spaces are used). Enabling this option means the indent will preserve as many existing characters as possible for indenting, and only add additional tabs or spaces as required. NOTE: When using ">>" multiple times the resulting indent is a mix of tabs and spaces. You might not like this. NOTE: 'preserveindent' is reset when 'compatible' is set. Also see 'copyindent'. Use :retab to clean up white space.
回答
如果要基于'ts'的设置将所有标签替换为空格,可以使用:retab。它也可以做相反的事情。