2012-03-14 3 views
5

Я постоянно делаю это в Vim: [сделать что-то в вкладышем или нормальном режиме], Esc,: WSСохранить файл после каждого редактирования в Vim

я это сотни раз в день. Вместо этого я хотел бы потерять привычку и сохранить vim в файл сразу после любого изменения в буфер.

Все работает от SSD, поэтому я не ожидаю, что производительность будет проблемой.

ответ

2

Не знаю, что я знаю, кроме его кодирования (check out the VIM Wiki for a starting point). Файл подкачки VIM практически выполняет то, что вы запрашиваете, для целей восстановления.

От VIM man page;

Своп-файл обновляется после набора 200 символов или если у вас есть не напечатал ничего в течение четырех секунд

Похоже, что бы поймать большинство причуды. Есть ли какая-то конкретная проблема, которую вы пытаетесь избежать?

+0

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

10

Добавить это простое отображение на ваш ~/.vimrc:

inoremap <Esc> <Esc>:w<CR> 

автоматически записывать текущий буфер на каждом <Esc> в ВСТАВИТЬ режиме.

+4

Кажется очевидным, теперь, когда я думаю об этом, но решает только половину проблемы. Вы можете редактировать буфер без входа в режим вставки. –

+0

OMG Я бы проголосовал за это 50 раз, если бы мог –

2

CursorHold и CursorHoldI может помочь. Согласно документации:

|CursorHold|  the user doesn't press a key for a while 
|CursorHoldI|  the user doesn't press a key for a while in Insert mode 

Эти события огонь только раз после бездействия и зависят от updatetime переменной (по умолчанию: 4000ms). Таким образом, вы можете:

:au CursorHold <buffer> :update 

Какой будет обновлять текущий файл буфера (т.е. сохранить только в случае изменения) после того, как по умолчанию 4 секунды бездействия в нормальном режиме.

Добавить автокоманду для CursorHoldI, если вы хотите получить то же поведение в режиме Вставки.