Не заменяйте выделенный текст при выполнении autocmd в VIM - PullRequest
1 голос
/ 12 марта 2012

У меня есть autocmd в моем .vimrc:

autocmd FocusLost,BufLeave,BufWritePre *.py :exe "normal! ma" | :%s/\s\+$//e | :exe "normal `a"

Эта команда имеет целью удалить все завершающие пробелы из моего буфера, сохраняя курсор в текущей позиции.

Проблема в том, что когда команда вызывается и какой-то текст выделен, текст заменяется на ma. Как я могу изменить мою autocmd декларацию, чтобы:

  • Все еще работает, когда какой-то текст выделен
  • Сохранить текст без изменений
  • Сохранить выделение, если был выбран какой-либо текст
  • Сохранить позицию курсора, если текст не был выделен

Примечание: я использую MacVim.

1 Ответ

2 голосов
/ 13 марта 2012

Вы можете сохранить положение курсора (и общее окно «Вид») с помощью winsaveview().Сохраненную позицию (и вид) можно восстановить с помощью winrestview().

Следующий код использует локальную переменную буфера b:spacestrip_view для сохранения вида (вместо перезаписи метки *).1010 *):

autocmd FocusLost,BufLeave,BufWrite *.py let b:spacestrip_view=winsaveview()|%s/\s\+$//e|call winrestview(b:spacestrip_view)
...