Отступ всего файла в Vim, не покидая текущего местоположения курсора - PullRequest
7 голосов
/ 17 августа 2011

Я уже знаю, что gg=G может сделать отступ для всего файла в Vim. Но это заставит меня перейти к началу файла после отступа. Как сделать отступ для всего файла и сохранить курсор в той же позиции?

Ответы [ 4 ]

15 голосов
/ 17 августа 2011

См. :h ''

Это вернет вас к первому символу в строке, с которой вы начинаете:

gg=G''

и вернет вас к стартовой линии и начальный столбец:

gg=G``

Я предполагаю, что вторая версия с обратным трюком - это та, которая вам нужна.На практике я обычно просто использую версию с двойным апострофом, поскольку на клавиатуре трудно получить обратную подпись.

2 голосов
/ 17 августа 2011

Добавьте это к вашему .vimrc

function! Preserve(command)
  " Preparation: save last search, and cursor position.
  let _s=@/
  let l = line(".")
  let c = col(".")
  " Do the business:
  execute a:command
  " Clean up: restore previous search history, and cursor position
  let @/=_s
  call cursor(l, c)
endfunction
nmap <leader>> :call Preserve("normal gg>G")<CR>

Вы также можете использовать это для любой другой команды, которую вы хотите, просто измените аргумент на функцию сохранения.Идея взята отсюда: http://vimcasts.org/episodes/tidying-whitespace/

1 голос
/ 17 августа 2011

Вы можете установить закладку для текущей позиции с помощью команды m, за которой следует буква. Затем после выполнения команды indent вы можете вернуться к этой закладке с помощью команды `(backtick), за которой следует та же буква.

0 голосов
/ 21 ноября 2013

В духе ответа Алекса я использую следующее отображение в vimrc.

nnoremap g= :let b:PlugView=winsaveview()<CR>gg=G:call winrestview(b:PlugView) <CR>:echo "file indented"<CR>

при нажатии g= в обычном режиме отступается весь буфер и позиция прокрутки / курсора сохраняется.

...