Как удалить окружающий рубиновый блок (do / end) в vim - PullRequest
0 голосов
/ 18 октября 2018

Как удалить блок объемного звука, разделенный do / end в ruby, с помощью vim

Например,

(10..20).map do |i| <CURSOR HERE>
  (1..10).map do |j|
    p j
  end
end

Я хочу сделать что-то вроде dsb (удалить блок объемного звучания) иполучить

  (1..10).map do |j|
    p j
  end

1 Ответ

0 голосов
/ 21 октября 2018

Может быть, вы можете сделать nnormap.

Каждая пара end / do находится в одном и том же отступе, поэтому сначала вы должны найти отступ для пары - в этом случае следующая строка для того же отступа (потому что ваш курсор находится вdo строка.)

Таким образом, вы можете сделать функцию vimscript с поиском следующей строки отступа и удалить ее.

Это пример функции.Вы можете настроить желаемый - т.е.) установить отступ для линий покоя.

function! DeleteWithSameIndent(inc)
    " Get the cursor current position
    let currentPos = getpos('.')
    let currentLine = currentPos[1]
    let firstLine = currentPos[1]
    let matchIndent = 0
    d

    " Look for a line with the same indent level whithout going out of the buffer
    while !matchIndent && currentLine != line('$') + 1 && currentLine != -1
        let currentLine += a:inc
        let matchIndent = indent(currentLine) == indent('.')
    endwhile

    " If a line is found go to this line
    if (matchIndent)
        let currentPos[1] = currentLine
        call setpos('.', currentPos)
        d
    endif
endfunction

nnoremap di :call DeleteWithSameIndent(1)<CR>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...