Подтвердить что ты не робот

Vim: напишите мой файл при каждом нажатии клавиши

Я бы хотел, чтобы vim автоматически записывал мой файл как можно чаще. Идеалом было бы каждое нажатие клавиши.

Мне нужно регулярно сэкономить, чтобы увидеть, как будет работать мой фоновый сбор. Это make файл для латексного документа, и я бы хотел, чтобы предварительный просмотр показывал мне почти обновленный документ, когда я закончил набирать текст.

Возможный ответ (ответы ниже помогли сделать это)

" Choose your own statusline here
let g:pbstatusline="%F\ %y\ %l:%c\ %m"
set statusline=%F\ %y\ %l:%c\ %m

autocmd FileType tex setlocal autowriteall

" Save the file every 5 keypresses
autocmd FileType tex setlocal statusline=%!pb:WriteFileViaStatusLine()

" Save the file every time this event fires.
autocmd FileType tex :autocmd InsertLeave,CursorHold,CursorHoldI * call pb:WriteFileViaStatusLine("always")

" 1 optional param: "always" is only allowed value.
let s:writefilecounter = 0
function! pb:WriteFileViaStatusLine(...)
   if s:writefilecounter > 5 || (a:0 > 0 && a:1 == "always")
      if &buftype == ""
         write
      endif
      let s:writefilecounter = 0
   else
      let s:writefilecounter = s:writefilecounter + 1
   endif

   return g:pbstatusline
endfunction
4b9b3361

Ответ 1

Один хак - использовать свою строку состояния:

function! WriteFile() 
  if &buftype == ""
    write
  endif
  return '%f %h%w%m%r%=%-14(%l,%c%V%) %(%P%)'
endfunction
setlocal statusline=%!WriteFile()
set laststatus=2

Пока отображается строка состояния, она обновляется после каждого изменения файла. При обновлении вызывается функция WriteFile(), которая записывает файл (и возвращает мое приближение в строке состояния по умолчанию). С помощью laststatus=2 строка состояния отображается, даже когда открыто только одно окно.

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

Ответ 2

Эти хаки больше не нужны. Vim может автоматически записывать файл на диск всякий раз, когда он изменяется. Просто добавьте это в свой MYVIMRC:

autocmd TextChanged,TextChangedI <buffer> write

Я считаю, что вам нужен Vim 7.4. В отличие от autosave=1, это сохранит ваш файл сразу после его изменения.

Ответ 3

Имеются события CursorMoved и CursorMovedI autocmd, но я не думаю, что там, который применяется каждый раз, когда вы вводите текст в режиме Insert.

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

Ответ 4

Если вы используете Linux, вы можете взглянуть на
http://www.charlietanksley.net/philtex/vim-live-latex-preview/

Он использует скрипты и MuPDF (легкий просмотрщик PDF) для предварительного просмотра латексной разметки.
Это очень быстро и лучшее/самое простое решение, которое я нашел до сих пор. Я использую его довольно долгое время, и он отлично работает!

Ответ 5

Упс! Мне сообщили, что я забыл упомянуть, что это использование находится в списке TODO и "Coming Soon®". Я действительно хотел эту функцию несколько дней назад и обнаружил, что она еще не работает. Убирайся!

использовать параметр автосохранения в .vimrc(_vimrc для windows)

set autosave=4

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

TODO... очевидно, я не удержался, ГДЕ Я нашел это, когда написал этот ответ давно. Спасибо @sehe

Ответ 6

Я предлагаю использовать метод, описанный в аналогичном Сохранить файл после каждого изменения в vim:


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 (по умолчанию: 4000 мс). Таким образом, вы можете:

:au CursorHold <buffer> :update

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

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


Настройки CursorHold, CursorHoldI вместе с очень коротким updatetime заставят vim мгновенно сохранить файл после редактирования.