如何在vim中只使用制表符(而不是空格)

knsnq2tg  于 2022-11-11  发布在  其他
关注(0)|答案(3)|浏览(414)

我更喜欢使用tab而不是white space(可能和大多数其他的有一点不同)
但是我发现,当我点击行尾的Enter时,它会添加一些 * 白色**,但不会添加制表符。因此,我必须删除它们并按制表符
我想知道如何将vim设置为:
1.仅使用制表符缩进行
1.制表符看起来像4个空格,但实际上是制表符
1.当在行尾点击enter时,新行仅以制表符开始
我已经在谷歌上搜索了一段时间,但没有找到一个好的答案。提前谢谢你

更新

@Alok提供的答案在大多数情况下都能很好地工作。但是我发现,有时候,它取决于文件类型。例如,如果你正在编辑一个haml文件,而你的vimfiles/indent/中有一个haml.vim,那么所有的制表符都将转换为space。所以如果你只希望它是tab,您应该修改(或删除)相应的缩进文件。

mnowg1ta

mnowg1ta1#

您要查找的设置是:

set autoindent
set noexpandtab
set tabstop=4
set shiftwidth=4

作为单行:

set autoindent noexpandtab tabstop=4 shiftwidth=4

autoindent可以替换为smartindentcindent,这取决于你的口味。也可以看看filetype plugin indent on
http://vim.wikia.com/wiki/Indenting_source_code

rwqw0loc

rwqw0loc2#

在讨论的后期,只为那些努力强迫使用制表符的人准备。在当前版本的 vim〉8)中,它需要设置:

:set noet ci pi sts=0 sw=4 ts=4

其扩展为:

:set noexpandtab
:set copyindent
:set preserveindent
:set softtabstop=0
:set shiftwidth=4
:set tabstop=4

我们还可以将此设置仅用于特定的文件类型,利用setlocal

autocmd FileType c,cpp,java,python setlocal noet ci pi sts=0 sw=4 ts=4

如需进一步参考,请参阅:https://vim.fandom.com/wiki/Indent_with_tabs,_align_with_spaces

8cdiaqws

8cdiaqws3#

在我的例子中,set indentexpr=做到了这一点。
我找到了一些配置文件,其中设置了fd python.vim /的恼人行为。在/usr/share/vim/vim90/indent/python.vim中有一行setlocal indentexpr=python#GetIndent(v:lnum)。函数python#GetIndent定义在/usr/share/vim/vim90/autoload/python.vim中。该函数返回了一个奇怪的值,该值不是shiftwidthtabstop的倍数。因此,Vim插入了一个制表符,后面跟着一些空格。
现在,我已经将indentexpr设置为空值,我认为vim福尔斯到autoindentsmartindentcindent被关闭。(https://vimhelp.org/indent.txt.html
当然set noexpandtab也是必需的,我不确定这里是否有其他相关的设置。
编辑:autoindent并不完美,它所做的无非是缩进新行和前一行一样多。

set smartindent
set cinwords=if,elif,else,try,except,finally,with,for,while,class,def

不能像预期的那样工作,而且cindent似乎不适合python,所以使用indentexpr毕竟是要走的路。
幸运的是,缩进功能是可以配置的,请参阅help ft-python-indent或查看代码--这是关于disable_parath括号_indenting功能的更多信息。

if !exists('g:python_indent')
    let g:python_indent = {}
endif
let g:python_indent.disable_parentheses_indenting = 1

https://vi.stackexchange.com/a/38824/43863

相关问题