Vim: как восстановить логические и физические позиции курсора? - PullRequest
12 голосов
/ 13 января 2012

Как восстановить «логические» и «физические» позиции курсора при открытии файла?

То есть:

  1. курсор должен находиться на последней логической строке в файле.

  2. курсор должен быть на последней физической строке в соответствии с окном vim

Я заметил это сообщение . Он помещает курсор в правую логическую строку. Но физическая позиция курсора в окне - это первая строка или середина.

UPDATE : Решение - mkview и loadview, как отмечает @sehe.

Чтобы заставить его работать с другими плагинами (в моем случае, файл латекса + поле латекса ), было бы полезно следующее:

au BufWinLeave *.tex mkview

au VimEnter *.tex loadview

Из документации Vim VimEnter:

  • После выполнения всех действий по запуску, включая загрузку файлов .vimrc, выполнение аргументов "-c cmd", создание всех окон и загрузку в них буферов.

UPDATE2 : для лучшей организации "view-snapshot-files"

Создав папку ~/.vim/view, вы сохраните все «view-snapshot-files» там.

Если вы используете git для синхронизации ~/.vim между компьютерами, возможно, вы захотите

  • игнорировать файлы в ~/.vim/view,
  • но оставьте пустую папку в своем репо.

Тогда вам нужно (дополнить согласно ответам здесь )

  • создать пустой файл: ~/.vim/view/.gitignore
  • положить view/* и !.gitignore в ~/.vim/.gitignore

1 Ответ

24 голосов
/ 14 января 2012

Хорошие новости, :mkview уже имеет это (см. Выдержку из документации ниже).

Наиболее конкретно :loadview восстанавливает положение прокрутки, а также состояние сворачивания, если viewoptions включает cursor,folds.

Еще лучше то, что вы можете прозрачно включать представления для всех открытых файлов, если хотите. Например. чтобы включить сохранение представления для всех исходных файлов C, добавьте это в $ MYVIMRC:

au BufWinLeave *.c mkview
au BufWinEnter *.c silent loadview

Редактировать В соответствии с комментариями Хонъяна, в сочетании с некоторыми плагинами, это может работать лучше, если вы использовали команду VimEnter auto для загрузки представления.

При желании можно использовать опцию viewdir, чтобы определить местоположение для сохраненных видов.

Обязательно посмотрите также :mksession, поскольку он еще более мощный, поскольку он может восстанавливать несколько окон, вкладок и их положения, отображения, регистры, параметры, состояние сгиба и т. Д. и т. д.

Как это работает

Vim :mkview сохраняет команды ex для восстановления местоположения, как показано ниже:

silent! normal! zE
let s:l = 88 - ((4 * winheight(0) + 4) / 9)
if s:l < 1 | let s:l = 1 | endif
exe s:l
normal! zt
88
normal! 025l

:loadview просто получает эти команды, как и любой другой vimscript.

Из документов

Примечание Это вырезано из документов, будьте уверены, что чтение делает he :mkview

                            *:mkvie* *:mkview*
:mkvie[w][!] [file] Write a Vim script that restores the contents of the
            current window.
            When [!] is included an existing file is overwritten.
            When [file] is omitted or is a number from 1 to 9, a
            name is generated and 'viewdir' prepended.  When the
            last directory name in 'viewdir' does not exist, this
            directory is created.
            An existing file is always overwritten then.  Use
            |:loadview| to load this view again.
            When [file] is the name of a file ('viewdir' is not
            used), a command to edit the file is added to the
            generated file.

The output of ":mkview" contains these items:
1. The argument list used in the window.  When the global argument list is
   used it is reset to the global list.
   The index in the argument list is also restored.
2. The file being edited in the window.  If there is no file, the window is
   made empty.
3. Restore mappings, abbreviations and options local to the window if
   'viewoptions' contains "options" or "localoptions".  For the options it
   restores only values that are local to the current buffer and values local
   to the window.
   When storing the view as part of a session and "options" is in
   'sessionoptions', global values for local options will be stored too.
4. Restore folds when using manual folding and 'viewoptions' contains
   "folds".  Restore manually opened and closed folds.
5. The scroll position and the cursor position in the file.  Doesn't work very
   well when there are closed folds.
6. The local current directory, if it is different from the global current
   directory.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...