User Tools

Site Tools


informatique:logiciels:vim

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatique:logiciels:vim [2015/10/20 06:16] – [.vimrc] backup et writebackup pteuinformatique:logiciels:vim [2025/01/02 15:48] (current) – [Divers] Thèmes pteu
Line 10: Line 10:
  
 Le mode insertion permet de taper du texte, le mode commande permet de faire tout le reste (tout ce qui suit). Il faut noter que en mode commande, la touche ''<tab>'' permet l'auto-complétion comme en console. Le mode insertion permet de taper du texte, le mode commande permet de faire tout le reste (tout ce qui suit). Il faut noter que en mode commande, la touche ''<tab>'' permet l'auto-complétion comme en console.
 +
 +
 +=====Les options=====
 +
 +  * ''-R'' **r**eadonly : pour ouvrir un fichier en lecture seule
  
  
Line 78: Line 83:
   * ''g'' indique que l'on veut remplacer toutes les occurences du //<motif recherché>// (par défaut on ne modifie que la première).   * ''g'' indique que l'on veut remplacer toutes les occurences du //<motif recherché>// (par défaut on ne modifie que la première).
  
 +====Supprimer les lignes contenant un motif====
 +Pour supprimer toutes les lignes contenant le motif *toto*, en mode commande : '':g/toto/d''
 ====Commande sur tous les buffers==== ====Commande sur tous les buffers====
  
-Pour appliquer une commande non pas sur le fichier courant mais sur ous les buffers, il faut utiliser le préfix '':bufdo!''. Pour faire un remplace ment de chaine par exemple : +Pour appliquer une commande non pas sur le fichier courant mais sur tous les buffers, il faut utiliser le préfixe '':bufdo!''. Pour faire un remplacement de chaine par exemple : 
-  :bufdo! %s/init/final/g+<code bash> 
 +:bufdo! %s/init/final/g 
 +</code>
  
 =====Divers===== =====Divers=====
Line 103: Line 112:
 </code> </code>
  
 +  * pour lancer vim en mode insertion : ''vim +startinsert'' ou ''vim +start'' en plus court
 +
 +=====Thèmes=====
 +
 +  * afficher les thèmes installés: '':colorscheme ?'' ou '':colorscheme ^D''
 +  * changer le thème: '':colorscheme <theme>''
 =====Commandes avancées===== =====Commandes avancées=====
  
Line 114: Line 129:
  
  
-====Diviser la fenêtre==== +====Diviser la fenêtre (split)====
-VIM permet de diviser la fenêtre de façon à travailler simultanément sur 2 fichiers (ou plus..).+
  
-En mode commande, taper '':split'' permet de diviser l'écran horizontalement, et '':vsplit'' verticalement. Si on spécifie en paramètre un nom de fichier ('':split <fic>'', en sachant que vous pouvez utiliser l'auto-complétion avec <tab> comme en console), ce dernier sera ouvert dans le nouveau cadre ; sinon le cadre sera rempli par le même fichier que l'original. Les opérations sur les fenêtre commencent par ''ctrl+w''.+VIM permet de diviser (splitter) la fenêtre de façon à travailler simultanément sur 2 fichiers (ou plus..). Pour lancer vim directement splitté : 
 +<code bash> 
 +# Ouvrir fic1 et fic2 en partage horizontal (split) 
 +vim -o fic1 fic2
  
-On passe d'un cadre à l'autre avec ''<ctrl+w> w'' (les touches control et w simultanément, puis w). On peut redimentionner le cadre courant avec ''ctrl+w +'' et ''ctrl+w -'' pour respectivement agrandir ou rétrécir le cadre d'une ligneOn peut ajouter un facteur devant le **+** et le **-** : ''ctrl+w 5+'' augmentera la taille du cadre courant de 5 lignes. On annule le dernier redimentionnement avec un ''ctrl+w x''.+# Ouvrir fic1 et fic2 en partage vertical (vsplit) 
 +vim -O fic1 fic2 
 +</code> 
 + 
 +Dans une fenêtre vim, en mode commande taper '':split'' pour diviser l'écran horizontalement, et '':vsplit'' verticalement. Si on spécifie en paramètre un nom de fichier ('':split <fic>'', en sachant que vous pouvez utiliser l'auto-complétion avec <tab> comme en console), ce dernier sera ouvert dans le nouveau cadre ; sinon le cadre sera rempli par le même fichier que l'original. Les opérations sur les fenêtres commencent par Controle + w : ''Ctrl+w s'' pour splitter (horizontalement) et ''Ctrl+v'' pour "vsplitter" (verticalement). 
 + 
 +On sélectionne un cadre avec: 
 +  * ''Ctrl+w'' ''w'' pour sélectionner le suivant ; 
 +  * ''Ctrl+w'' + ''j'', ''k'', ''h'' ou ''l'' pour sélectionner celui respectivement celui du bas, du haut, de gauche ou de droite. 
 + 
 +On peut redimensionner le cadre courant avec 
 +  * ''Ctrl+w +'' et ''Ctrl+w -'' pour agrandir ou rétrécir le split d'une ligne, ou 
 +  * ''Ctrl+w >'' et ''Ctrl+w <'' pour agrandir ou rétrécir le vsplit d'une colonne 
 +On peut ajouter un facteur devant le ''+/-/>/<'' pour augmenter la taille de X lignes/colonnes, par ex: ''Ctrl+w 5+'' pour agrandir de 5 lignes. On annule le dernier redimensionnement avec un ''Ctrl+w x''
 + 
 +Pour fermer le split courant : ''Ctrl+w q'' ; pour fermer tous les splits sauf le courant : ''Ctrl+w o''.
  
  
Line 273: Line 305:
 "swap files (*.swp) - default "swap files (*.swp) - default
 "set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp "set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
 +
 +" spécifier des retraits de ligne spécifiques pour certains fichiers
 +"autocmd BufEnter *.py set tabstop=4 softtabstop=4 shiftwidth=4
 +"autocmd BufEnter *.json set tabstop=2 softtabstop=2 shiftwidth=2
 +"autocmd BufEnter *.yml set tabstop=2 softtabstop=2 shiftwidth=2
 </code> </code>
  
Line 284: Line 321:
 La solution est de se rendre dans les options de Kitty/Putty, dans : Terminal/Features et de cocher l'option "Disable application keypad mode". La solution est de se rendre dans les options de Kitty/Putty, dans : Terminal/Features et de cocher l'option "Disable application keypad mode".
  
 +====Désactiver l'indentation pour coller du texte====
  
 +L'auto-indentation c'est pratique lorsqu'on écrit du code mais lorsqu'on copie/colle du texte ça devient infernal car chaque nouvelle ligne se décale un peu plus pour devenir une suite informe de bouts de mots.
 +<code bash>
 +ligne 1
 +     ligne 2
 +          ligne 3
 +</code>
 +Pour éviter cela il suffit d'activer l'option '':set paste'', qui désactive toute initiative de vim d'auto-indenter quoi que ce soit. On copie/colle le contenu, puis on réactive : '':set nopaste''.
 +
 +Un premier niveau de sagesse consiste à mapper ce switch sur une touche, comme par exemple ''F3'' :
 +<code bash>
 +set pastetoggle=<F3>
 +</code>
 +
 +Un second niveau d'érudition est d'activer ce switch automatiquement lors du copier/coller (lignes à ajouter dans le vimrc) :
 +<code bash>
 +let &t_SI .= "\<Esc>[?2004h"
 +let &t_EI .= "\<Esc>[?2004l"
 +
 +inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
 +
 +function! XTermPasteBegin()
 +  set pastetoggle=<Esc>[201~
 +  set paste
 +  return ""
 +endfunction
 +</code>
 +
 +source: [[https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode|Automatically set paste mode in Vim when pasting in insert mode]]
 +
 +====Ne pas copier les numéros de ligne====
 +
 +Quand on copie du texte à la souris alors que les numéros de lignes sont affichés, on les copie (bêtement) avec le texte. On peut certes utiliser les raccourcis ''v''/''V'', ''y'' pour copier, et enfin ''p'' pour coller mais cela ne fonctionne qu'en interne dans **vi**, pas si on veut coller le texte dans une autre appli.
 +
 +Un contournement est de désactiver les numéros de ligne au moment de copier :/ :
 +<code bash>
 +:set nonu
 +</code>
 =====Liens===== =====Liens=====
  
   * [[http://www.linux-france.org/article/appli/vi/faq/index.html|FAQ VIM]]   * [[http://www.linux-france.org/article/appli/vi/faq/index.html|FAQ VIM]]
 +  * [[https://vimawesome.com|Awesome Vim plugins (from across the Universe)]]
informatique/logiciels/vim.1445321781.txt.gz · Last modified: 2015/10/20 06:16 by pteu