Vim - Visual Block: удалять, а не вставлять - PullRequest
12 голосов
/ 04 июля 2011

Я часто использую визуальный блок и вставляю его в несколько строк, когда, например, закомментирую много кода. Это отлично подходит для вставки текста в одну и ту же позицию на нескольких строках, но я не могу понять, как удалить этот текст позже, используя режим визуального блока, Backspace, Del и d не работают Я использую MacVim.

Ответы [ 3 ]

23 голосов
/ 04 июля 2011

Вы ищете x :

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh

Затем Visual-Block-Select, x:

root:/root:/bin/bash
daeaemon:/usr/sbin:/bin/sh
bin/bin:/bin/sh
sys/dev:/bin/sh

Я использую это часто, по одной и той же причине - комментируя и раскомментируя большие блоки кода.

6 голосов
/ 04 июля 2011

Это прямо не отвечает на вопрос (sarnold уже сделал это), но я хотел бы предложить, что есть более эффективные способы (не) комментирования блоков кода.У меня есть функция CommentToggle, которая либо комментирует, либо комментирует текущую строку, в зависимости от того, начинается ли она с «comchar».

function! CommentToggle(comchar)
    let firstchar = matchstr(getline("."),"[^ ]")
    if firstchar == a:comchar
        sil exe 'normal ^xx'
    else 
        sil exe 'normal ^i' . a:comchar . ' '
    endif
endfunction

Итак, для файлов perl вы можете отобразить:

nnoremap <silent> <leader>c :call CommentToggle('#')<CR>

и нажатие 3 \ c (un-) комментирует три строки с позиции курсора.

Вы также можете написатьотображение в визуальном режиме:

vnoremap <silent> <leader>c :call CommentToggle('#')<CR>

, позволяющее выбрать визуальную область и нажать \ c , чтобы (не) комментировать их все.

Эта конкретная функция работает только для односимвольных комментариев ("#", "%" и т. Д.), Но ее просто расширить на более длинные строки (например, "//") и даже на более сложные замены, напримеркак комментарии HTML.

Надеюсь, это поможет.

1 голос
/ 06 июля 2011

Ответ принца Гуляша не работает в строках с ведущими вкладками.

Я изменил его, добавив символ табуляции в шаблон, хотя строки теряют свой отступ после комментария и комментария.

function! CommentToggle( comchar )
        let firstchar = matchstr( getline( "." ), "[^ \t]" )
        if firstchar == a:comchar
                sil exe 'normal ^2x'
        else
                sil exe 'normal ^i' . a:comchar . ' '
        endif
endfunction

Мне нравится больше добавлять символ комментария к первой позиции в строке, эта модификация функции принца Гуляша делает свое дело:

function! CommentToggle( comchar )
        let firstchar = matchstr( getline( "." ), "[^ \t]" )
        if firstchar == a:comchar
                sil exe 'normal ^2x'
        else
                sil exe 'normal gI' . a:comchar . ' '
        endif
endfunction
...