vim scp://remoteuser@server.tld//absolute/path/to/document
vim file.txt +324
=: réajuste l'indentationCtrl+A: incrémente le nombre sous le curseur, Ctrl+X décrémenteL: place le curseur en haut de l'écran, H en bas et M au milieucf_: édite jusqu'à l'underscore inclusct_: édite jusqu'à l'underscore exclus3s: édite trois caractères (pareil que c3l)Ctrl+R % insère le nom du fichier courant (Source)Ctrl+L permet de rafraîchir l'affichage, et donc la coloration syntaxique (utile s'il y avait avant une ligne qui la fait planter).Maj+R passe en mode remplacement: équivalent du mode insertion, mais le curseur écrase ce qui est déjà présent.Maj+R C-r “ (source)C-x C-g permet de compléter les chemins/noms de fichiers.gf ouvre le fichier dans un nouveau buffer. Ctrl+O permet de revenir au fichier précédemment ouvert.Ctrl+w f: ouvre le fichier dans une nouvelle fenêtreCtrl+w gf: ouvre le fichier dans un nouvel ongletDans tout le document:
:%s/old/new/g
Ajouter c demande confirmation avant chaque remplacement.
\C juste avant old permet de rechercher en respectant la casse.
% signifie tout le document (en réalité un raccourci pour 1,$). Il est possible d'utiliser .,$ pour chercher uniquement entre le curseur et la fin du document (. indique la ligne courante du curseur). Il est également possible de sélectionner des lignes en mode Visuel et ensuite appuyer sur :. Source
\<mot\>: recherche exactement mot (sans caractères alphanumériques avant ou après).
Pour remplacer par un retour à la ligne, utiliser \r.
:noh
:vimgrep /pattern/ file
Recherche récursive: utiliser ./**/*.c
Ensuite, pour afficher les résultats, utiliser :cw ou :copen.
Tous les yanks sont placés dans des registres.
Utiliser :reg pour les visualiser.
Pour coller un ancien yank, il faut insérer le contenu du registre: “2p pour coller le contenu du registre #2.
En saisissant une commande, utiliser le raccourci Ctrl+R, Ctrl+W.
Recharger dans Vim un fichier ouvert, mais modifié par un autre programme:
:e # raccourci pour :edit
Aller à l'accolade/parenthèse/crochet correspondant: %.
Ouvrir plusieurs fichiers (source) :
vim -p file1 file2 ... # un fichier par onglet vim -o file1 file2 ... # un fichier split horizontal vim -O file1 file2 ... # un fichier split vertical
:tabnew [fichier]: ouvre un nouvel onglet :tabn: aller à l'onglet suivant:tabp: aller à l'onglet précédent:tabr: aller au premier onglet:tabl: aller au dernier onglet:tabs: affiche la liste des onglets ouverts:wa: sauvegarde tous les onglets:xa: sauvegarde tous les onglets et quitte:q: ferme un onglet:split filename: ouvre filename en scindant la fenêtre verticalementCtrl+w flèche: change la fenêtre sélectionnéeCtrl+w Ctrl+w: change la fenêtre sélectionnée en cyclant sur les fenêtresCtrl+w _: maximize la fenêtre maintenantCtrl+w =: rend chaque fenêtre de taille identiqueCtrl+w +/-: augmente/réduit la taille de la fenêtre de une ligne (préfixer du nombre de lignes souhaités)Ctrl+x >/<: augmente/réduit la taille de la fenêtre de une colonne (préfixer du nombre de colonnes souhaités):vsplit file: ouvre file mais en scindant la fenêtre horizontalement:hide: ferme la fenêtre actuelle:only: garde uniquement la fenêtre actuelle ouverte:ls: liste les buffers:b 2: ouvre le deuxième buffer dans la fenêtre sélectionnéeCtrl+w Maj+H/J/K/L: déplace la fenêtre vers la direction de la lettre (Source). Utile pour passer d'un split horizontal vers vertical ou vice-versa.
Sélectionner la zone de texte dont on souhaite avoir les statistiques, g puis Ctrl+g.
Avec deux splits déjà ouverts, on peut générer un diff de ces splits, ce qui liera les curseurs des deux splits. Il faut alors faire :diffthis dans chaque split. On annule avec :diffoff pour chaque split ou :diffoff! prendra effet sur tous les splits.
Si on ne veut pas de diff, il faut faire :set scrollbind dans chaque split. Ainsi les splits déroulent de façon synchronisée, mais pas la ligne indiquant l'emplacement du curseur. On annule avec :set noscrollbind.
Ctrl+V permet de passer en mode Visual Block.DOWN pour sélectionner les lignes.Shift+i pour passer en mode Insertion sur la première ligne.Echap pour appliquer à toutes les lignes sélectionnées.
Accès au terminal avec :term ou :terminal.
Ctrl+w Maj+N: convertit la fenêtre en mode Normal, utile pour pouvoir copier du texte par exemple. Retour au mode Insertion avec i
Pour que le raccourci , t ouvre le terminal dans un split vertical, ajouter au fichier ~/.vimrc:
nnoremap <silent> ,t :vert term<CR>
Sauvegarder sa session de travail: :mks (il est possible de donner un nom de fichier en paramètre dans lequel la session sera sauvegardée)
Restaurer sa session: vim -S ou vim -S [fichier de session] ou :source [fichier de session].
https://thoughtbot.com/blog/wrap-existing-text-at-80-characters-in-vim
:set textwidth=80
Sélectionner en mode Visuel le texte à reformater et reformater avec le raccourci gq.
https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d
La liste Quickfix contient les erreurs rapportées par make et ce genre d'outils.
:copen:cnext:cprev:cclose
La liste Location contient une liste d'emplacements, que ce soient les résultats de :vimgrep ou Syntastic:
:lopen:lnext:lprevSans utiliser le plugin BufExplorer:
:buffers, :ls, :files: liste les buffers ouverts:bprevious, :bp: bascule sur le buffer précédent:bnext, :bn: bascule sur le buffer suivant:bfirst et :blastUn fichier JSON (source) :
:%!python -m json.tool
Pour un fichier XML, sélectionner les lignes en mode visuel, puis (source) :
!xmllint --format -
Basculer entre les formats DOS/Unix.
Connaître le format actuel du fichier:
:set ff?
Changer le format:
:set ff=unix :set ff=dos
Pour enregistrer un fichier en UTF-8 (source) :
:write ++enc=utf-8
Un fichier foo.c.bar ne sera pas colorié car il n'a pas la bonne extension finale. On peut alors exécuter (source):
:set syntax=c
On peut configurer la coloration syntaxique pour les fichiers avec une extension particulière:
autocmd BufNewFile,BufRead *.gnuplot set syntax=gnuplot
Faire un diff entre ce qu'il y a dans le buffer, et ce qui est sur le disque (source):
:w !diff % -
:w !sudo tee %
:ol
Convertir 4 espaces en tabulations (source) :
:set tabstop=4 " To match the sample file :set noexpandtab " Use tabs, not spaces :%retab! " Retabulate the whole file
Pour par exemple préciser le langage utilisé dans un fichier, ajouter un commentaire :
# vim: ft=ruby
Sous Debian, installer le paquet exuberant-ctags.
Ensuite, à la racine du projet, faire:
ctags -R .
Possibilité d'exclure des dossiers avec --exclude=folder (rajouter autant que besoin).
Placer le fichier dans un dossier particulier:
ctags --tag-relative=yes -R -f ./.git/ctags .
--tag-relative=yes permet d'utiliser des chemins relatifs par rapport à où est exécutée la commande. À utiliser si on indique à Vim que le fichier de tags est dans un sous-dossier d'un projet.
Ajouter dans la configuration de Vim
set tags=./tags,tags,.git/ctags; " cherche le fichier tags dans le dossier du fichier en cours d'édition, puis cherche tags dans tous les dossiers parents, finalement cherche .git/ctags dans tous les dossiers parents
Cf Lier les curseurs des splits
Raccourcis (source):
do: utiliser le diff de l'autre split (obtain)dp: utiliser ce diff dans l'autre split (push)
Vérifier avec vim –version que xterm_clipboard est activé (un + devant). Si ce n'est pas le cas, installer le paquet vim-gtk3.
Ensuite, il suffit d'utiliser les commandes classiques de Vim pour copier.
Ajouter dans le vimrc:
command DeleteFirst 1delete " la commande :DeleteFirst appellera :1delete, qui supprime la première ligne
let mapleader = "," let g:mapleader = "," let maplocalleader = "," " for vimtex (see http://learnvimscriptthehardway.stevelosh.com/chapters/06.html) set hidden set number set tabstop=4 set expandtab set shiftwidth=4 set smartindent set autoindent set backspace=indent,eol,start set shiftround set ignorecase set showmode set ruler set cursorline " souligne la ligne actuelle syntax on colorscheme desert "set colorcolumn=80 "display a vertical line set hlsearch "highlight search results set incsearch set showmatch "show matching parenthesis set mouse=a "support mouse set splitbelow " ouvre les splits horizontaux en bas de l'écran set splitright " ouvre les splits verticaux à droite de l'écran set wildmenu set wildmode=longest:full,full map <leader><Left> :tabp<cr> map <leader><Right> :tabn<cr> map <leader>h :tabp<cr> map <leader>l :tabn<cr> " Display hidden chars: set list set listchars=tab:>.,trail:.,extends:#,nbsp:. " Creates a group ExtraWhitespace hi ExtraWhitespace ctermbg=red guibg=red " Highlight trailing whitespaces autocmd Syntax * syn match ExtraWhitespace /\s\%#\@<!$/
On peut faire un retour à la ligne dans le fichier de configuration en plaçant un antislash au début des nouvelles lignes (source).
Sources:
vim -u NONE fichier
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Adapter son .vimrc:
set nocompatible " Nécessaire filetype off " Nécessaire " Ajout de Vundle au runtime path et initialisation set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " On indique à Vundle de s'auto-gérer :) Plugin 'gmarik/Vundle.vim' " Nécessaire " " C'est ici que vous allez placer la liste des plugins que Vundle doit gérer " call vundle#end() " Nécessaire filetype plugin indent on " Nécessaire " ... " Le reste de votre .vimrc " ...
Sauvegarder le fichier, puis, depuis Vim (A faire pour installer les plugins):
:source ~/.vimrc :PluginInstall
Pour supprimer un plugin : enlever la ligne Plugin … dans le fichier ~/.vimrc et lancer :PluginClean.
Une barre en bas plus sympa. Source
Ajouter dans le fichier ~/.vimrc:
Plugin 'itchyny/lightline.vim'
Si la barre n'est pas correcte, ajouter dans le ~/vimrc:
set laststatus=2
Afficher la branche Git dans la barre: installer le plugin itchyny/vim-gitbranch et rajouter à la fin de ~/.vimrc:
let g:lightline = { \ 'active': { \ 'left': [ [ 'mode', 'paste' ], \ [ 'gitbranch', 'readonly', 'filename', 'modified' ] ] \ }, \ 'component_function': { \ 'gitbranch': 'gitbranch#name' \ }, \ }
https://github.com/airblade/vim-gitgutter
Ajouter le plugin airblade/vim-gitgutter, l'installer, et réduire le temps d'actualisation dans le .vimrc:
set updatetime=100
]c: va à la zone modifiée suivante (next hunk)[c: va à la zone modifiée précédente (previous hunk)<leader>hu: restaure le hunk tel qu'il était avant la modificationSi la colonne est toujours noire (constaté sur MacOS, avec un thème blanc) (source):
highlight clear SignColumn highlight GitGutterAdd ctermfg=green highlight GitGutterChange ctermfg=yellow highlight GitGutterDelete ctermfg=red highlight GitGutterChangeDelete ctermfg=yellow
Plugin 'scrooloose/nerdtree' Plugin 'Xuyuanp/nerdtree-git-plugin' autocmd vimenter * NERDTree " automatically open NERDTree " NERDTree starts when vim is called without argument autocmd StdinReadPre * let s:std_in=1 autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif autocmd StdinReadPre * let s:std_in=1 autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif " Close vim if NERDTree is the last open autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif let NERDTreeMapActivateNode='<space>' " ouvre un fichier et un noeud avec espace map <leader>nn :NERDTreeToggle<cr> " ouvre et ferme NERDTree avec :nn let NERDTreeIgnore=['\.o$', '^__pycache__$[[dir]]'] " n'affiche pas les fichier .o et les dossiers __pycache__
Facilite la gestion des plugins ouverts.
Ajouter le plugin jlanzarotta/bufexplorer.
let g:bufExplorerDefaultHelp=0 let g:bufExplorerShowRelativePath=1 let g:bufExplorerFindActive=1 let g:bufExplorerSortBy='name' map <leader>o :BufExplorer<cr>
Le plugin s'active avec :o.
Ensuite:
o ou enter ouvre le fichier sous le curseur dans la fenêtre précédenteF ouvre le fichier sous le curseur dans un split horizontal, au-dessus de la fenêtre actuellef ouvre le fichier sous le curseur dans un split horizontal, en-dessous de la fenêtre actuelleV ouvre le fichier sous le curseur dans un split vertical, à gauche de la fenêtre actuellev ouvre le fichier sous le curseur dans un split vertical, à droite de la fenêtre actuellet ouvre le fichier sous le curseur dans un nouvel ongletu affiche/cache les fichiers cachésPermet de trouver facilement des fichiers.
Installer le plugin kien/ctrlp.vim
let g:ctrlp_working_path_mode = 'ra' let g:ctrlp_max_height = 20 let g:ctrlp_custom_ignore = 'node_modules\|^\.DS_Store\|^\.git\|^\.coffee' map <leader>b :CtrlPBuffer<cr> map <leader>m :CtrlPMRUFiles<cr> map <leader>f :CtrlP<cr>
Le plugin s'active avec Ctrl+P.
Permet de facilement commenter du code.
Installer le plugin scrooloose/nerdcommenter.
" Use compact syntax for prettified multi-line comments let g:NERDCompactSexyComs = 1
Raccourcis:
[count]<leader>c<space> toggle les commentairesPlugin de complétion automatique du code.
Installer le plugin ycm-core/YouCompleteMe.
cd ~/.vim/bundle/YouCompleteMe python3 install.py --clangd-completer
(plus de détails sur le dépôt GitHub)
let g:ycm_autoclose_preview_window_after_completion = 1 let g:ycm_auto_hover = '' " désactive l'affichage du type de la variable lors du passage du curseur
Activation avec Tab en mode Insertion.
Permet de faire du LaTeX avec Vim.
Installer le plugin lervag/vimtex et le programme latexmk.
Compilation automatique lors de la sauvegarde avec le raccourci <leader>ll.
Voir ceci pour les raccourcis.
Le plugin plasticboy/vim-markdown ajoute le support du Markdown.
let g:vim_markdown_folding_disabled = 1 " désactive le folding par défaut de tout le document let g:vim_markdown_no_default_key_mappings = 1 " désactive les raccourcis de cette extention, qui est en conflit avec ]c
https://github.com/vim-syntastic/syntastic
Le plugin vim-syntastic/syntastic permet une analyse syntaxique des fichiers.
set statusline+=%#warningmsg# set statusline+=%{SyntasticStatuslineFlag()} set statusline+=%* let g:syntastic_always_populate_loc_list = 1 let g:syntastic_auto_loc_list = 1 let g:syntastic_check_on_open = 1 let g:syntastic_check_on_wq = 0
Préciser le chemin des includes:
let g:syntastic_c_include_dirs = ['/usr/local/opt/gtk+3/include/gtk-3.0/', '/usr/local/opt/pango/include/pango-1.0/']
Ignorer certains messages (source):
let g:syntastic_quiet_messages = { "regex": "file not found" }
Préciser la version Python à utiliser pour l'analyse syntaxique (source):
let g:syntastic_python_python_exec = 'python3' let g:syntastic_python_checkers = ['python']
tpope/vim-sleuth : détecte automatiquement l'indentation du fichier et configure les tabs/…nelsyeung/twig.vim : coloration syntaxique pour les fichiers Twigluochen1990/rainbow : coloration des parenthèses (presque sans configuration)wsdjeg/vim-fetch : permet d'ouvrir le fichier à la ligne n quand on demande à ouvrir foo.txt:n
Corriger la coloration syntaxique cassée dès qu'un dollar est saisi dans un environnement lstlisting ou \lstinline{} :
syn region texZone matchgroup=texBeginEnd start="\\begin{lstlisting}" matchgroup=texBeginEnd end="\\end{lstlisting}\|%stopzone\>" syn match texInputFile "\\lstinline\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt