2013-06-23 3 views
0

Я хочу удобно удалить случайно помещенную вкладку при использовании 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. Кроме того, я пропустил более легкий подход?

ответ

3

Вместо того, чтобы делать 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 

задерживаясь клавишей возврата должен вернуться на вкладке полной, если вставить вкладку случайной.

0

Если вы хотите получить доступ к значению опции в vimscript, вы можете использовать синтаксис &option (см. :help expr-option). Это упрощает первую половину своей функции

let numSpaces = &tabstop 

Что касается отмены вкладки случайного, все, что должно требовать поджимает Backspace, если вы не вставляя символы табуляции.

Если вы имеете в виду вы хотите, чтобы «удалить уровень отступа» вместо «удалить закладку», то вы должны использовать встроенную команду для этого, нажав Ctrl +d в режиме вставки. Аналогичным образом вы можете использовать Ctrl + t, чтобы добавить уровень отступа к текущей строке. Обе эти функции работают независимо от того, где находится ваш курсор в текущей строке, в отличие от попыток управления отступом вручную с помощью Backspace, а также для правильной работы на основе настроек 'shiftwidth', 'expandtab' и 'tabstop'.

Смежные вопросы