Vim函数中的变量类型

问题描述:

我想在使用vim时方便地删除意外放置的选项卡。那跳出来我的解决方法是为插入模式映射到下面的VIM功能:Vim函数中的变量类型

function DeleteTab() 
    redir => l:numSpaces "captures output of set 
    set tabstop? 
    redir END 
    "Strip off non-numerical output of 'set tabstop?' 
    let l:numSpaces = substitute(l:numSpaces, "tabstop=", "", "") 
    let l:numSpaces = substitute(l:numSpaces, " ", "", "g") 
    "all echom lines are for debugging purposes 
    echom "1" 
    if l:numSpaces > 0 
    echom "2" 
    while 1:numSpaces > 0 
    execute "normal i<bs>" 
    let l:numSpaces = l:numSpaces - 1 
    endwhile 
endfunction 

除了没有做什么,我意,调用此函数的结果是我的信息“1”,但不是“2”。这意味着l:numSpaces不会被解释为一个数字。我如何做相当于在vimscript中投射。另外,我错过了一个更简单的方法吗?

而不是做redir只是使用&tabstop&符号获取值并将其放置在变量中。

let l:numSpaces = &tabstop 

你有下一个问题是这一行

while 1:numSpaces > 0 

你写了1(一个),而不是l(小写L)

所以固定功能看起来是这样的。

function! DeleteTab() 
    let l:numSpaces = &tabstop 
    echom "1" 
    if l:numSpaces > 0 
     echom "2" 
    endif 
    while l:numSpaces > 0 
     execute "normal i<bs>" 
     let l:numSpaces = l:numSpaces - 1 
    endwhile 
endfunction 

而且这个功能是有点儿毫无意义。我相信,如果你设置以下(或什么都重视你想要的)

set tabstop=4 
set softtabstop=4 
set shiftwidth=4 

击中退格键,如果你插入一个偶然的标签应该回到一个完整的标签应达到你想要的行为。

如果要访问vimscript中某个选项的值,可以使用语法&option(请参阅:help expr-option)。你的函数上半年简化为

let numSpaces = &tabstop 

至于撤消意外的标签,都应该要求紧迫Backspace键,除非你不插入制表符。

如果你的意思是你想要的,而不是为“删除缩进的水平”,“删除标签”,那么你应该使用内置的命令是,按下Ctrl键+d插入模式。同样,您可以使用Ctrl + t将缩进级别添加到当前行。这两个工作不管你的光标在当前行中的位置,不像试图用Backspace手动管理缩进,以及根据你的'shiftwidth','expandtab''tabstop'设置做正确的事情。