Блокнот ++ как “много редактирование” в VIM?

Я переключаюсь из Блокнота ++ к VIM как редактор основного текста.

Блокнот ++ может иметь несколько курсоров удержанием ctrl и нажимающий где угодно в тексте, поэтому если Вы вводите, текст появляется в нескольких местоположениях.

Действительно ли это возможно в энергии? Чему-то нравится, вставляют после выбора нескольких строк в визуальном режиме, но с возможностью иметь курсоры где угодно в тексте.

Это - функция, которую я редко использую, также это довольно легко преодолимо, мне просто любопытно, так как это - единственное я, could't находят замену для в энергии все же.

19
задан proto-n 8 May 2010 в 21:33
поделиться

3 ответа

Нет такой встроенной функции.

Позвольте мне предложить функцию, которая повторяет команду (например, . повторяет последнюю команду изменения ) в положениях заданных меток. И метки, и команда указываются как строковые аргументы. Метки, указанные в способе определения диапазонов в регулярных выражениях или в спецификаторе формата scanf . Например, za-dx означает метки z , a , b , c , d , x .

function! MarksRepeat(marks, command)
    let pos = 0
    let len = strlen(a:marks)
    let alpha = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    let beta =  '1234567899bcdefghijklmnopqrstuvwxyzzBCDEFGHIJKLMNOPQRSTUVWXYZZ'
    while pos < len
        if a:marks[pos + 1] != '-'
            exe 'norm `' . a:marks[pos] . a:command
            let pos += 1
        elseif a:marks[pos] <= a:marks[pos+2]
            let mark = a:marks[pos]
            let stop = a:marks[pos+2]
            if mark =~ '[0-9a-zA-Z]' && stop =~ '[0-9a-zA-Z]'
                while 1
                    exe 'norm `' . mark . a:command
                    if mark == stop
                        break
                    endif
                    let mark = tr(mark, alpha, beta)
                endwhile
            endif
            let pos += 3
        endif
    endwhile
endfunction

В вашем случае функцию можно использовать следующим образом.

  1. Отметьте все места для одновременной вставки (кроме одного) с помощью меток Vim (с помощью команды m ).
  2. Фактически вставьте текст в одно место, которое не было отмечено.
  3. Запустите функцию:

    : call MarksRepeat (‹marks›, '.') 
     
6
ответ дан 30 November 2019 в 04:58
поделиться

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

Это обратное тому, что вы просили, потому что вы хотели отметить места перед вводом текста, но дает тот же результат за такое же количество нажатий клавиш :).

5
ответ дан 30 November 2019 в 04:58
поделиться

Проверить плагин множественного выбора vim: http://www.vim.org/scripts/script.php?script_id=953

4
ответ дан 30 November 2019 в 04:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: