Vim函数中的变量类型

Vim函数中的变量类型,vim,keymapping,Vim,Keymapping,我想在使用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, "tabst

我想在使用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
函数DeleteTab()
redir=>l:numSpaces“捕获集合的输出
停下来?
重拨端
“去除‘设置tabstop’的非数字输出?”
让l:numSpaces=替换(l:numSpaces,“tabstop=”,“”,“”)
让l:numSpaces=替换(l:numSpaces,“,”,“g”)
“所有echom线路均用于调试目的
回声“1”
如果l:numSpaces>0
回声“2”
而1:numSpaces>0
执行“正常i”
设l:numSpaces=l:numSpaces-1
循环结束
端功能

除了不做我想做的事情之外,调用此函数的结果在我的消息中是“1”,而不是“2”“。这意味着l:numSpaces不会被解释为数字。我如何在vimscript中执行等效的强制转换。此外,我是否缺少一种更简单的方法?

不进行重拨,只需使用
&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

如果插入意外制表符,则按backspace键应返回完整制表符。

只需使用“
”和“
符号”即可获取值并将其放入变量中,而不用重拨

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

如果插入意外选项卡,按backspace键应返回完整选项卡。

如果要访问vimscript中某个选项的值,可以使用语法
&option
(请参见
:help expr option
)。这将函数的前半部分简化为

let numSpaces = &tabstop
至于撤消意外制表符,只需按Backspace键,除非您没有插入制表符


如果您的意思是要“删除缩进级别”而不是“删除选项卡”,那么应该使用内置命令,在插入模式下按Ctrl+d。类似地,可以使用Ctrl+t向当前行添加缩进级别。无论光标在当前行中的什么位置,这两种方法都会起作用,这与尝试使用退格手动管理缩进不同,也不同于根据
'shiftwidth'
'expandtab'
'tabstop'
设置执行正确操作。

如果要访问vimscript中某个选项的值,您可以使用语法
&选项
(请参阅
:help expr option
)。这将函数的前半部分简化为

let numSpaces = &tabstop
至于撤消意外制表符,只需按Backspace键,除非您没有插入制表符

如果您的意思是要“删除缩进级别”而不是“删除选项卡”,那么应该使用内置命令,在插入模式下按Ctrl+d。类似地,可以使用Ctrl+t向当前行添加缩进级别。无论光标在当前行中的什么位置,这两种方法都会起作用,这与尝试使用Backspace手动管理缩进以及根据
'shiftwidth'
'expandtab'
'tabstop'
设置执行正确操作不同