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 [2009/06/08 20:15] – édition externe 127.0.0.1informatique:logiciels:vim [2020/11/17 08:39] (current) – Désactiver l'indentation pour coller du texte pteu
Line 7: Line 7:
   * ''i'' (**i**nsert) insérer du texte avant le curseur ; ''I'' insérer en début de ligne   * ''i'' (**i**nsert) insérer du texte avant le curseur ; ''I'' insérer en début de ligne
   * ''a'' (**a**ppend) insérer du texte après le curseur ; ''A'' insérer en fin de ligne   * ''a'' (**a**ppend) insérer du texte après le curseur ; ''A'' insérer en fin de ligne
-  * ''o'' insérer du texte après la ligne courante ; ''O'' insère du texte avant le ligne courante +  * ''o'' insérer du texte après la ligne courante ; ''O'' insère du texte avant la ligne courante 
-  * ''I'' et ''A'' pour ajouter en début et fin de phrase+
 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 29: Line 34:
   * ''0'' et ''$'' permettent de placer le curseur en début et en fin de ligne   * ''0'' et ''$'' permettent de placer le curseur en début et en fin de ligne
   * ''gg'' et ''G'' permet d'aller au début / à la fin du fichier   * ''gg'' et ''G'' permet d'aller au début / à la fin du fichier
-  * ''<nb>G<'' aller à la ligne //<nb>// (équivalent à '':<nb>'')+  * ''<nb>G'' aller à la ligne //<nb>// (équivalent à '':<nb>'')
   * ''w'' avance le curseur d'un mot ; ''W'' avance le curseur après le prochain espace   * ''w'' avance le curseur d'un mot ; ''W'' avance le curseur après le prochain espace
   * ''b'' recule le curseur d'un mot ; ''B'' recule le curseur après le dernier espace   * ''b'' recule le curseur d'un mot ; ''B'' recule le curseur après le dernier espace
Line 35: Line 40:
   * ''('' et '')'' permettent de changer de phrase   * ''('' et '')'' permettent de changer de phrase
   * ''F'' et ''n'' suivi d'une lettre pour se rendre à la prochaine occurrence de cette lettre   * ''F'' et ''n'' suivi d'une lettre pour se rendre à la prochaine occurrence de cette lettre
 +  * normalement //de nos jours// on peut bouger le curseur avec les flèches directionnelles ; à l'origine c'était les touches ''h'', ''j'' ,''k'', ''l'' (resp. gauche, bas, haut, droite).
  
 =====Manipulation de chaines===== =====Manipulation de chaines=====
Line 59: Line 64:
   * ''d'' pour couper   * ''d'' pour couper
   * ''y'' pour copier   * ''y'' pour copier
 +  * ''c'' pour le **c**hanger
 On peut le //coller// par la suite avec ''p''. On peut le //coller// par la suite avec ''p''.
-Pour supprimer le texte, on le coupe sans le coller derrière.+Pour supprimer un texte, on le coupe sans le coller derrière.
  
  
Line 77: 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).
  
 +====Commande sur tous les buffers====
 +
 +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 :
 +<code bash>
 +:bufdo! %s/init/final/g
 +</code>
  
 =====Divers===== =====Divers=====
Line 82: Line 94:
   * ''u'' **u**ndo, annuler la dernière opération ou ''<nb>u'' pour annuler les <nb> dernières opérations   * ''u'' **u**ndo, annuler la dernière opération ou ''<nb>u'' pour annuler les <nb> dernières opérations
   * '':U'' **U**ndo, annuler toutes les opérations faites sur le ligne courante   * '':U'' **U**ndo, annuler toutes les opérations faites sur le ligne courante
-  * ''[<nb>] ctrl+r'' **r**edo [les <nb> dernières opérations]+  * ''ctrl+r'' **r**edo restaure la dernière modification annulée 
 +  * ''[<nb>] ctrl+r'' **r**edo restaure les <nb> dernières opérations
   * '':!<cmd>'' exécute la commande //<cmd>//   * '':!<cmd>'' exécute la commande //<cmd>//
   * ''ctrl+g'' affiche des information sur le fichier dans la barre d'état   * ''ctrl+g'' affiche des information sur le fichier dans la barre d'état
Line 92: Line 105:
 Notez que le ^M s'écrit ''ctrl+v, ctrl+m''. Notez que le ^M s'écrit ''ctrl+v, ctrl+m''.
  
 +  * comparer 2 fichiers avec **vimdiff** : très pratique car beaucoup plus visuel que le traditionnel diff
 +<code>
 +vimdiff toto.sh toto2.sh
 +</code>
  
 +  * pour lancer vim en mode insertion : ''vim +startinsert'' ou ''vim +start'' en plus court
 =====Commandes avancées===== =====Commandes avancées=====
  
Line 104: Line 122:
  
  
-====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 118: Line 153:
   * '':set mouse=a'' active la souris (je ne conseille pas d'activer cette option car elle désactive les copier/coller avec le bouton du milieu)   * '':set mouse=a'' active la souris (je ne conseille pas d'activer cette option car elle désactive les copier/coller avec le bouton du milieu)
   * '':set paste'' désactive l'indentation automatique ('':set nopaste'' pour la réactiver)   * '':set paste'' désactive l'indentation automatique ('':set nopaste'' pour la réactiver)
 +
 +====.vimrc====
 +
 +C'est le fichier de préférence lu au démarrage de vim. Il recherche par défaut dans la home de l'utilisateur courant (''~/.vimrc'') puis dans ''/etc/vimrc''.
 +
 +Exemple de fichier .vimrc :
 +<code vim>
 +" pt3u's .vimrc
 +"
 +" sources d'inspiration :
 +" http://people.via.ecp.fr/~alexis/formation-linux/config/vimrc
 +" http://linux-attitude.fr/post/Vimrc-collaboratif
 +
 +" raccourcis pour les tabulations
 +" src:
 +" http://forum.hardware.fr/hfr/Programmation/PHP/editeur-linux-ssh-sujet_103584_1.htm#t1545786
 +map <C-Right> :tabn<CR>
 + imap <C-Right> <C-O>:tabn<CR>
 +map <C-Left> :tabp<CR>
 + imap <C-Left> <C-O>:tabp<CR>
 +map <C-Up> :tabnew<CR>
 + imap <C-Up> <C-O>:tabnew<CR>
 +map <C-Down> :tabc<CR>
 + imap <C-Down> <C-O>:tabc<CR>
 +
 +" Ne pas assurer la compatibilité avec l'ancien Vi = utiliser les vraies touches
 +set nocompatible
 +
 +" Nombre de commandes dans l'historique
 +set history=50
 +
 +"coloration syntaxique
 +syntax on
 +
 +" config des couleurs
 +" precise la couleur de la fonte/bg des commentaires
 +"" choix : term=none|blod
 +""          cterm{fg|bg}=couleur
 +highlight Comment ctermfg=6
 +
 +" choix d'un theme
 +" colorscheme delek
 +
 +"surligner les recherches
 +set hlsearch
 +"turn off match highlighting
 +map <F10> :noh<CR>
 +
 +"afficher la position du curseur en bas
 +set ruler
 +
 +
 +" affiche la barre de status
 +set laststatus=2
 +" contenu de la barre de status
 +"set statusline=%<%f%h%m%r%=%l,%c\ %P
 +set statusline=
 +" buffer number
 +set statusline+=%-3.3n\
 +" file name
 +set statusline+=%f\
 +" flags
 +set statusline+=%h%m%r%w
 +" filetype
 +set statusline+=\[%{strlen(&ft)?&ft:'none'},
 +" encoding
 +set statusline+=%{&encoding},
 +" file format
 +set statusline+=%{&fileformat}]
 +set statusline+=%=
 +" current char
 +set statusline+=0x%-8B\
 +" offset
 +set statusline+=%-14.(%l,%c%V%)\ %<%P
 +
 +
 +"set nu
 +" visual bell = avertissements visuels plutot que sonores
 +set vb
 +
 +" remplace les tabs par x espaces
 +set tabstop=4
 +"set softtabtop=4
 +" indentation automatique
 +"set autoindent
 +" espace indent auto
 +set shiftwidth=4
 +" active la touche backspace
 +"set backspace=2
 +" more powerful backspacing ?
 +"set backspace=indent,eol,start
 +" remplace les tab par des espaces
 +"set expandtab
 +
 +"souligne la ligne active (src : Linux mag #110)
 +set cursorline
 +"highlight cursorline ctermfg=black ctermbg=gray
 +
 +" affiche x lignes en dessous du curseur
 +set scrolloff=2
 +
 +set smartindent
 +set showmode
 +" surligne les paires de paranthèses
 +set showmatch
 +" affiche les commandes dans la barre de status
 +set showcmd
 +" essaye de garder le curseur dans la même colonne quand on change de ligne
 +set nostartofline
 +
 +" Option de la complétion automatique
 +set wildmode=list:full
 +
 +"filetype indent on
 +
 +" ecriture du buffer automatique avant une action spéciale
 +set autowrite
 +set linebreak
 +
 +" rechch insensitives si en minuscules ; si contient une majuscule alors rechch sensitive
 +set smartcase
 +
 +" affiche les numéros de ligne
 +"set number
 +
 +" Utilise la souris pour les terminaux qui le peuvent (tous ?)
 +" pratique si on est habitué à coller sous la souris et pas sous le curseur ;
 +" attention fonctionnement inhabituel
 +"set mouse=a
 +
 +" Envoyer le curseur sur la ligne suivante/précédente après usage des flèches droite/gauche en bout de ligne :
 +set whichwrap=<,>,[,]
 +
 +" auto-backup files (*~)
 +set backup
 +"set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
 +set backupdir=~/.vim/backup
 +
 +" make backup before overwriting a file, to avoid lost of the file because of a write error
 +" backup file is deleted unless \"set backup\" is on
 +"set writebackup
 +"set backupskip=/tmp/*,/private/tmp/*
 +
 +"swap files (*.swp) - default
 +"set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
 +</code>
 +
 +
 +=====Problèmes=====
 +
 +====Pavé numérique inutilisable====
 +
 +Malgré mon .vimrc aux petits oignons, j'ai un soucis pour saisir les chiffres du numpad (pavé numérique) qui affichent de mauvais caractères lorsque j'utilise Kitty/Putty sous Windows.
 +
 +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]]
  
  
informatique/logiciels/vim.1244492135.txt.gz · Last modified: 2013/10/14 20:55 (external edit)