vim-设置自动缩进,用空格或制表符填充前导空格
似乎如果我们启用“ai”,vim将用tabstop填充前导空间。 我可以用“et”来填充空格。我不喜欢混合了空格和tabstop的C文件 我的vimrc:vim-设置自动缩进,用空格或制表符填充前导空格,vim,auto-indent,tabstop,Vim,Auto Indent,Tabstop,似乎如果我们启用“ai”,vim将用tabstop填充前导空间。 我可以用“et”来填充空格。我不喜欢混合了空格和tabstop的C文件 我的vimrc: set ts=4 et set ai set hlsearch syntax on filetype plugin indent on autocmd FileType make setlocal noexpandtab 然而,在某些情况下,当我点击键盘上的“TAB”时,我确实需要输入tabstop,例如,在makefile和其他一些文件中
set ts=4 et
set ai
set hlsearch
syntax on
filetype plugin indent on
autocmd FileType make setlocal noexpandtab
然而,在某些情况下,当我点击键盘上的“TAB”时,我确实需要输入tabstop,例如,在makefile和其他一些文件中。
“autocmd FileType”命令不好:我无法在vimrc中添加所有文件类型
我想要的很简单:
怎么做?我是用函数做的。我对它进行了测试,但在某些特定情况下,您可能需要修复一些bug。尝试将此添加到vimrc:
set et
function! Inserttab()
let insert = ""
let line = getline('.')
let pos = getpos('.')[2]
let before = ""
let after = line
if pos != 1
let before = line[ 0: pos - 1]
let after = line[pos : strlen(line) ]
endif
if pos != 1 && substitute(before, "[ \t]", "", "g") != ""
let insert = "\t"
else
let insert = " "
endif
let line = before . insert . after
call setline('.', line)
call cursor(line('.'), strlen(before . insert))
endfunction
inoremap <tab> <esc>:call Inserttab()<CR>a
但是我不明白这一点,使用这个版本,您将永远无法从插入模式手动缩进。inoremap((getline('.)[:col('.)-2]=~'\S')?(“\\t”):(重复('.,&ts-((virtcol('.)-1)%&ts)))
inoremap <expr> <tab> ((getline('.')[:col('.')-2]=~'\S')?("\<C-v>\t"):(repeat(' ', &ts-((virtcol('.')-1)%&ts))))
如果我阅读正确,它与@Lynch answer的功能相同
您还可以使用
:这将插入
,而不调用任何映射,并忽略expandtab,除非您出于某种原因重新映射
或
如果只想插入选项卡,请执行以下操作
inoremap <Tab> <C-v><Tab>
inoremap
它将忽略expandtab设置。一种方法是
如果其他人正在使用选项卡,则必须重置ts以同意您正在编辑的文件。另一方面,它会使选项卡立即变得明显,这也是可取的。MakefileFileType插件已经在本地取消了expandtab。哦,这真的很难。我认为可能存在一个简单的解决方案。令人恼火的是自动缩进在缩进空间中自动插入制表符。我讨厌这个。如果我禁用自动缩进,只需删除“et”即可达到我的目的^^经过深思熟虑,我喜欢ZyX的inoremap解决方案。另请参阅:有关自动缩进源代码的更全面的讨论。
inoremap <Tab> <C-v><Tab>