设置自动缩进,用空格或制表位填充前导空格



如果我们启用'ai', vim将用制表符填充前导空格。我可以用'et'填充它。我不喜欢混杂着空格和制表符的C文件。

我vimrc

:

set ts=4 et
set ai
set hlsearch
syntax on
filetype plugin indent on
autocmd FileType make setlocal noexpandtab

然而,在某些情况下,当我在键盘上按"TAB"时,我确实需要输入制表符,例如,在makefile和其他一些中。"autocmd FileType"命令不好:我不能在vimrc中添加所有文件类型。

我想要的是简单的:

  1. 自动缩进填充前导区域空间;
  2. 当按键盘上的'TAB'时,制表符停止输入,而不是空格(所以没有'et')

怎么做?

inoremap <expr> <tab> ((getline('.')[:col('.')-2]=~'S')?("<C-v>t"):(repeat(' ', &ts-((virtcol('.')-1)%&ts))))

如果我没看错的话,它和@Lynch的答案是一样的。

您也可以使用<C-v><Tab>:这将插入<Tab>而不调用任何映射并忽略expandtab,除非您出于某种原因重新映射了<C-v><C-v><Tab>

如果你只想插入制表符

inoremap <Tab> <C-v><Tab>

将忽略expandtab设置

我使用了一个函数。我对它进行了测试,但可能在某些特殊情况下,您将不得不修复一些错误。尝试将此添加到您的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

基本上它在可视模式下将键重新映射到函数Inserttab()。还要注意,如果您将ts更改为4以外的值,它仍然会输出4个空格而不是两个,因为该值是硬编码的。

我也不太熟悉vim脚本,但我认为所有使用的变量将是全局的,这是一件坏事。

我忘了说,要"看到"空白,你可以使用set list。使用set nolist禁用此功能。同样,在正常模式下,您可以使用ga查看光标所在字符的信息。

编辑我意识到您可能希望在行首插入制表符。我的脚本在开头插入空格,在其他地方插入制表符。

如果你真的想每次按tab键都有一个标签,你可以简单地使用这个:

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
    let insert = "t"
    let line = before . insert . after 
    call setline('.', line)
    call cursor(line('.'), strlen(before . insert))
endfunction
inoremap <tab> <esc>:call Inserttab()<CR>a

但是我看不出有什么意义,在这个版本中,你将永远无法从插入模式手动缩进

方法之一是

  1. :设置sw=4
  2. :set ts=46(或更大的数字)

自动缩进将不会插入制表符,除非您达到46个空格,在这种情况下,您可以放入更大的数字。

如果其他人正在使用制表符,那么你必须重置ts以同意你正在编辑的文件。另一方面,它将使制表符立即明显,这也是可取的。

相关内容

  • 没有找到相关文章

最新更新