Как правильно сделать отступ текста при использовании `put` в Vim

У меня проблемы с putting текстом в Vim.

Скажем, я хочу вставить строку /* Comment */ под строку $('table').append...

/* Comment */

for (var i=1; i<=lineLength ; i++) {
    $('table').append('<tr></tr>');
    for (var j=1; j<=lineLength; j++) {
    $('table tr:nth-last-child(1)').append('<td></td>');
    }
}

В большинстве текстовых редакторов мой рабочий процесс будет

  1. Выберите /* Comment */, нажмите «Вырезать».
  2. Переместите курсор в конец первой строки кода и нажмите клавишу возврата.
  3. Текстовый редактор автоматически устанавливает отступы, и я просто нажимаю «Вставить».

i.e.

/* Comment */

for (var i=1; i<=lineLength ; i++) {
    $('table').append('<tr></tr>');
    | <==Pipe is position of cursor before paste; pasted lines are inserted here.
    for (var j=1; j<=lineLength; j++) {
    $('table tr:nth-last-child(1)').append('<td></td>');
    }
}

Но с vim кажется, что я должен сделать это:

  1. Перейдите к строке /* Comment */, нажмите dd.
  2. Перейдите к строке $('table').append, нажмите p.

Новый код:

for (var i=1; i<=lineLength ; i++) {
        $('table').append('<tr></tr>');
/* Comment */. <== Comment is not correctly indented.
        for (var j=1; j<=lineLength; j++) {
        $('table tr:nth-last-child(1)').append('<td></td>');
        }
    }
  1. Вручную исправьте код с неправильным отступом.

Vim автоматически делает отступы, когда я начинаю новую строку с o, поэтому кажется, что он также должен обрабатывать putting на новую строку.... Есть ли команда, которая позволит мне put новых строк кода с правильным отступом?


person achalk    schedule 13.03.2017    source источник


Ответы (3)


:nnoremap p p`[v`]=

взято с https://github.com/sickill/vim-pasta.

person Asky McAskface    schedule 13.03.2017
comment
Как насчет :nnoremap p p`[v`]=? с github.com/sickill/vim-pasta. Или вы можете попробовать этот плагин. - person Asky McAskface; 14.03.2017
comment
Этот код, кажется, работает, спасибо. Я просто протестирую его в нескольких разных форматах.... - person achalk; 14.03.2017

Вы можете использовать ]p и [p для вставки на уровне отступа текущей строки. Обратите внимание, что это работает только в том случае, если содержимое регистра является строковым. См. :h ]p

Если вы хотите использовать ]p и друзей, но всегда хотите, чтобы это было построчно, я предлагаю вам взглянуть на Тима Поупа. подключаемый модуль unimpaired.vim. Он также обеспечивает сопоставление >p/<p, которое вставляет один уровень отступа глубже/мельче, а также =p/=P, которое вставляет, а затем повторно отступает, подобно p='].

person Peter Rincker    schedule 13.03.2017

:nnoremap p p='] делает то же самое, что и другой ответ, но с меньшим количеством нажатий клавиш. Не нужно визуально выбирать.

person Fonnae    schedule 28.06.2021