Чи можна застосовувати конфігурації vim без перезапуску?


80

Я хочу відредагувати .vimrcфайл із Vim та застосувати їх без перезапуску Vim.

Відповіді:


80

Так, просто використовуйте :so % команду під час редагування .vimrc.

Якщо ви хочете, щоб vim автоматично перезавантажив вашу конфігурацію, вам слід додати такі команди:

augroup myvimrchooks
    au!
    autocmd bufwritepost .vimrc source $MYVIMRC
augroup END

групування автокоманди тут, щоб уникнути "експоненційного" перезавантаження, якщо ви кілька разів збережете конфігурацію.


Зверніть увагу , це не працює з gvimrcабо якщо ваш файл називається _vimrcабо vimrc, або , якщо ви редагуєте файл з ім'ям .vimrcв іншому каталозі. Дивіться мою відповідь для вирішення цих питань.
Том Хейл

Для мене це не вдається з помилками типу Function Inc already exist, add ! to replace it.
Hi-Angel,

Яку функцію виконує augroup у цьому контексті? Чи не можна це переписати так просто autocmd! bufwritepost .vimrc source ~/.vimrc? Навіть якщо група потрібна з якихось причин, чи не можна пропустити рядок 2, якщо для початку переписати рядок 3 autocmd!?
Джон Карахаліс,

46

Ось версія, сумісніша з різними платформами, якщо ви працюєте на Mac / Windows / Linux і gvimrc:

augroup myvimrc
    au!
    au BufWritePost .vimrc,_vimrc,vimrc,.gvimrc,_gvimrc,gvimrc so $MYVIMRC | if has('gui_running') | so $MYGVIMRC | endif
augroup END

Autocmd переглядає всі потенційні *vimrcфайли, і коли один змінюється, він перезавантажує vimrcфайл, а потім, gvimrcякщо працює графічний інтерфейс.


5
Встановлюється під час запуску графічного інтерфейсу користувача. див.:help gvimrc
matpie

3
FANTASTIC, дякую. Якщо ви зробите це, уникайте пердення мозку, яке я щойно здійснив ... Я відкрив gvim, додав це до мого vimrc, а потім спробував підтвердити, що він спрацював. Ні ... через 20 хвилин я усвідомлюю, що ЗАБУДАВ ДЖЕРЕЛО ФАЙЛ ОДНОГО ПІСЛЯ ДОБАВЛЕНОГО AUTOCMD. Одного разу я це зробив, звичайно, все працювало. Я думаю, це було занадто мета для мене, і я мав психічний "переповнення стека".
Charlie Flowers

3
Я використовував це, але також перевіряв, чи $GVIMRCіснує, бо іноді цього немає. if has('gui_running') && filereadable($MYGVIMRC)
k107

Спочатку для мене було дивним лише те, що він просто перезавантажує файл vimrc, зберігаючи вже встановлені матеріали. Наприклад, якщо ви спочатку встановили "номер номера" у своєму vimrc, а потім ви прокоментували цей рядок і зберегли документ, у вас все ще будуть цифри зліва. Але насправді це має сенс ... якщо ви хочете щось відключити, вам слід це зробити вручну.
piponazo

1
Будь-яка причина не використовувати au BufWritePost $MYVIMRCчи au BufWritePost $MYVIMRC,$MYGVIMRC?
phs


8
" Quickly edit/reload this configuration file
nnoremap gev :e $MYVIMRC<CR>
nnoremap gsv :so $MYVIMRC<CR>

Щоб автоматично завантажуватись після збереження, додайте до свого $MYVIMRC:

if has ('autocmd') " Remain compatible with earlier versions
 augroup vimrc     " Source vim configuration upon save
    autocmd! BufWritePost $MYVIMRC source % | echom "Reloaded " . $MYVIMRC | redraw
    autocmd! BufWritePost $MYGVIMRC if has('gui_running') | so % | echom "Reloaded " . $MYGVIMRC | endif | redraw
  augroup END
endif " has autocmd

а потім востаннє введіть:

:so %

Наступного разу, коли ви збережете свій файл vimrc, його буде автоматично перезавантажено.

Особливості:

  • Повідомляє користувачеві, що сталося (також вхід в систему :messages)
  • Обробляє різні імена файлів конфігурації
  • Переконує, що він буде відповідати лише фактичному конфігураційному файлу (ігнорує копії в інших каталогах або fugitive://різницю)
  • Не генерує помилку при використанні vim-tiny

Звичайно, автоматичне перезавантаження відбуватиметься лише в тому випадку, якщо ви відредагуєте свій vimrcin vim.


Здається, це працює лише тоді, коли всі файли відкриті в тому самому екземплярі, vimв якому я редагую $MYVIMRC. Наприклад, якщо вони знаходяться в іншому терміналі, тоді мені все одно доведеться вручну джерело $MYVIMRC. Чи є спосіб обійти це?
Zoey Hewll

1
Не те, що я знаю: це працює, ловлячи, коли поточний vimвиписує файл. Можливо, можна відстежувати mtime у самому файлі, але не впевнений, як це зробити без асинхронного опитування.
Том Хейл,

1

autocmd! bufwritepost _vimrc джерело%

це автоматично перезавантажить усі конфігурації у файлі _vimrc при збереженні

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.