581 votes

Comment recharger votre fichier .vimrc sans redémarrer vim ?

Pouvez-vous modifier votre .vimrc et le recharger sans avoir à redémarrer Vim ?

727voto

Ryan Points 101

Si vous l'éditez, vous pouvez le recharger avec :

:so %

% correspond au nom du fichier actuel (voir :h current-file ) et :so est le diminutif de :source qui lit le contenu du fichier spécifié et le traite comme du code Vim.

En général, pour recharger le fichier .vimrc actuellement actif, utilisez ce qui suit (cf. Vim quotidien ):

:so $MYVIMRC

2 votes

Jetez un coup d'œil à stackoverflow.com/questions/803464/

45 votes

Et :so ~/.vimrc devrait aussi fonctionner sous unix

3 votes

:ainsi ~/_vimrc fonctionne sous Windows. Bien sûr, je garde mon _vimrc dans mon répertoire personnel Windows, sinon cela ne fonctionnera pas. Pour voir ce que Vim considère comme votre répertoire personnel, utilisez :echo expand("~") .

80voto

Andrei Points 1006

Encore mieux, vous configurez Vim pour qu'il surveille les changements dans votre .vimrc et recharger automatiquement la configuration.

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

Source : cette réponse sur SO

Remarque : cette méthode particulière tient compte des nombreuses variations des noms de fichiers de configuration de Vim, de sorte qu'elle est compatible avec Vim GUI, Vim Windows, etc.

2 votes

Quelle est la performance de cette méthode ?

0 votes

Je trouve que l'utilisation de ce type de commande bloque parfois mon nvim pendant quelques secondes ou plus.

12voto

Tom Hale Points 2006

Correspondance des clés

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

Une solution entièrement automatisée

A automatiquement recharger lors de l'enregistrement, ajoutez ce qui suit à votre fichier $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

puis, pour la dernière fois, tapez :

:so %

La prochaine fois que vous enregistrez votre vimrc il sera automatiquement rechargé.

Caractéristiques :

  • Indique à l'utilisateur ce qui s'est passé (également l'enregistrement à :messages )
  • Gère les différents noms des fichiers de configuration
  • Assurez-vous qu'il ne correspondra qu'au fichier de configuration réel (ignorez les copies dans d'autres répertoires, ou une fugitive:// diff)
  • Ne générera pas d'erreur si vous utilisez vim-tiny

Bien sûr, le rechargement automatique ne se produira que si vous modifiez votre vimrc dans vim.

5voto

maged Points 163

Une alternative à la mémorisation/dactylographie :so $MYVIMRC est ces mappings. Il vous permet d'éditer rapidement vimrc ( ev ) ou la source vimrc ( sv ).

" Quickly open/reload vim
nnoremap <leader>ev :split $MYVIMRC<CR>  
nnoremap <leader>sv :source $MYVIMRC<CR>

0voto

Ehsan Points 250

J'ai une version légèrement différente de ReloadVimrcFunction

" Reloads vimrc after saving it but keep cursor position
if !exists('*ReloadVimrcFunction')
    function! ReloadVimrcFunction()
        let save_cursor = getcurpos()
        source $MYVIMRC | windo redraw
        call setpos('.', save_cursor)
        echom "Reloaded $MYVIMRC"
    endfunction
endif
noremap <silent> <Leader>v :drop $MYVIMRC<cr>
command! -nargs=0 ReloadVimrc :call ReloadVimrcFunction()
nnoremap <silent> <C-s> :call ReloadVimrcFunction()<CR>

Afin d'éviter de charger la fonction deux fois, nous mettons :

if !exists('*ReloadVimrcFunction')

Nous sauvegardons également la position du curseur, car il serait ennuyeux de voir la position du curseur changer à chaque fois que nous rechargeons le système. $MYVIMRC .

J'ai également un augroup pour déclencher cette fonction chaque fois que je sauvegarde $MYVIMRC

augroup Reload
    autocmd!
    autocmd BufWritePost $MYVIMRC call ReloadVimrcFunction()
augroup END

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X