После попытки ответа @hobbs я заметил, что при фильтрации всего буфера через perltidy
курсор вернулся к байту 1, и мне пришлось мысленно записать исходный номер строки, чтобы я мог вернуться после завершения :Tidy
.
Итак, основываясь на ответах @hobbs 'и @ Ignacio, я добавил следующее к своему .vimrc
:
"define :Tidy command to run perltidy on visual selection || entire buffer"
command -range=% -nargs=* Tidy <line1>,<line2>!perltidy
"run :Tidy on entire buffer and return cursor to (approximate) original position"
fun DoTidy()
let l = line(".")
let c = col(".")
:Tidy
call cursor(l, c)
endfun
"shortcut for normal mode to run on entire buffer then return to current line"
au Filetype perl nmap <F2> :call DoTidy()<CR>
"shortcut for visual mode to run on the the current visual selection"
au Filetype perl vmap <F2> :Tidy<CR>
(закрытие "
добавлено в комментарии для подсветки синтаксиса SO (не обязательно, но допустим синтаксис vim))
DoTidy()
вернет курсор в исходное положение плюс или минус самое большее X
байт, где X
- это количество байтов, добавленных / удаленных на perltidy
относительно исходной позиции курсора. Но это довольно тривиально, пока вы держите вещи в порядке:).
[версия Vim: 7.2]
РЕДАКТИРОВАТЬ: Обновлен DoTidy()
для включения комментария @ mikew для удобства чтения и совместимости с Vim 7.0