2015-11-04 8 views
1

Я часто хочу раздавить git commits с помощью vim (используя rebase). У меня есть очень хороший ярлык для давя все коммиты от курсора до конца файла:Подмена текста Vim - следующие n строк (не остальная часть файла)

map s :,$s/^pick/squash/<CR> 

Но часто не хотят применять эту замену всех остальных строк в файле, но к следующему п строк , Есть ли способ изменить эту команду, чтобы применить ее только к следующим n строкам?

ответ

4

Если вы знаете n заранее (например, для 10):

nnoremap <buffer> s :,+10s/^pick/squash/<CR> 

Это изменяет текущую строку и следующие 10 линий.

Если вы не знаете заранее n, вы можете попробовать визуальное отображение:

xnoremap <buffer> s :s/^pick/squash/<CR> 

... поэтому сначала выберите диапазон (например V10j), а затем ударил s.

+0

Это ответ, который я хочу, хотя что-то не совсем верно, когда я пытаюсь поместить это в '.vimrc':' map s: s, + 10/^ pick/squash/ '. Я получаю 'E486: шаблон не найден: + 10/^ pick/squash /' Любые идеи? –

+0

У нее есть: map 's:.,. + 10s/^ pick/squash/' http://vim.wikia.com/wiki/Ranges. Я не могу отредактировать ваш ответ, так как изменилось менее 6 символов. Не могли бы вы обновить его, прежде чем я его помету? –

+1

Выполнено - я рекомендую использовать явные формы '* noremap', когда это возможно. – VanLaser

3

В качестве альтернативы вы можете использовать некоторые из инструментов, предоставляемых Vim's stock git ftplugins, которые предоставляют команды :Squash, :Cycle, .... Они удобны, но немного хромают сами по себе.

Вставьте следующий ~/.vim/ftplugins/gitrebase.vim:

nnoremap <buffer> S :Cycle<cr>:silent! call repeat#set('S')<cr> 
xnoremap S :normal S<cr>:silent! call repeat#set(v:count1.'VS')<cr>'< 

Теперь вы можете использовать S, чтобы перебрать варианты. Вы также можете визуально выбирать свои линии и использовать S. В качестве бонуса эти сопоставления работают с repeat.vim, так что команда . все еще работает

+0

Хороший ответ! Проголосовали. Возможно, второй «тихий» также хочет взломать, чтобы не показывать ошибку, если «vim-repeat» не установлен (если я правильно помню). – VanLaser

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