Это то, что беспокоило меня в течение длительного времени. Вероятно, «правильным» решением было бы отправить патч самому vim, который позволит вам настраивать границы абзаца с помощью регулярного выражения (например: установить абзацы, но на самом деле полезно).
В то же время, я сделал функцию и несколько отображений, что почти сделать правильную вещь:
function! ParagraphMove(delta, visual)
normal m'
normal |
if a:visual
normal gv
endif
if a:delta > 0
" first whitespace-only line following a non-whitespace character
let pos1 = search("\\S", "W")
let pos2 = search("^\\s*$", "W")
if pos1 == 0 || pos2 == 0
let pos = search("\\%$", "W")
endif
elseif a:delta < 0
" first whitespace-only line preceding a non-whitespace character
let pos1 = search("\\S", "bW")
let pos2 = search("^\\s*$", "bW")
if pos1 == 0 || pos2 == 0
let pos = search("\\%^", "bW")
endif
endif
normal |
endfunction
nnoremap <silent> } :call ParagraphMove(1, 0)<CR>
onoremap <silent> } :call ParagraphMove(1, 0)<CR>
" vnoremap <silent> } :call ParagraphMove(1, 1)<CR>
nnoremap <silent> { :call ParagraphMove(-1, 0)<CR>
onoremap <silent> { :call ParagraphMove(-1, 0)<CR>
" vnoremap <silent> { :call ParagraphMove(-1, 1)<CR>
Это не правильно обрабатывать отсчеты, как «4}» или визуальном режиме (правильно раскомментируйте строки vnoremap на свой страх и риск), но, похоже, подходит для таких вещей, как не сбивание текущего шаблона поиска, а не мерцание. Кроме того, 'd}', 'y}' и т. Д., Похоже, работают нормально. Если у кого-то есть идеи для того, чтобы сделать подсчет работы или фиксировать визуальный режим, пожалуйста, дайте мне знать.
Это достойный старт, но есть несколько проблем ... те, которые сразу приходят на ум: визуальный режим, сбивающий историю поиска, правильное отключение/сброс 'hlsearch', небольшое мигание курсора, когда он щелкает панель управления (незначительная, да, но все еще раздражающая). –
В любом случае, я думаю, что это хорошее решение ... И если ничего не получится, это может быть единственное решение (в этом случае немного скриптов Vim может сделать проблемы менее болезненными). –