Vi

De SeRoM - Wiki
Aller à : navigation, rechercher

Petit Mémo Vi

Commandes Vi

Pour diriger le curseur dans Vi, il faut utiliser:

  • h j k l À la place des flèches.
  • 0 $ Pour se placer au début ou fin de ligne.
  • W w B b Pour avancer par mot
  • <n>| Pour se déplacer au n-ème char de la ligne.
  • H M L Pour passer à la première(H) ligne de l'écran, la ligne du millieu(M) ou la dernière(L).
  • <n>H <n>M <n>L Pour arriver x lignes après H M ou L.
  • ( ) Pour se déplacer de phrase en phrase haut / bas
  • { } Pour se déplacer de paragraphe en paragraphe

GoTo

  • gg G Pour arriver en début(gg) ou en fin(G) de ficher
  • 44G Pour arriver au début de la 44e ligne.
  • ^G Affiche les infos sur la position du curseur (Ligne, colonne, ...)
  • `` ' ' Retourne à la dernière possition de modification (après emplois d'un GoTo ou un serach)

Pour couper remplacer ... :

  • cw remplace les char jusqu'à ce que l'on tape enter
  • r remplace le char en dessous du curseur par la lettre tapée
  • x supprime le char sous le curseur (5x supprime 5char suivants et 3X supprime les 3char précédents)
  • dd -> p couper -> coller la ligne (voir Supperssion et Récupération)
  • y -> p copier -> coller
  • "<a-z>yy pour copier qqch dans un buffer (a-z)
  • "<A-Z>yy pour copier qqch à la suite du buffer
  • "<a-z>p pour recopier le contenu d'un buffer (a-z)

Type d'insertion:

  • a insert après le curseur
  • i insert au curseur
  • c + <déplacement> remplace sur la longeur du remplacement (cw remplace le mot, c$ jusqu'en bout de ligne, c3l les 3char suivants).

Supperssion:

  • dd supprime la ligne
  • dw supprime par mot (ou la fin du mot si curseur est dedans >< db)
  • d$, d0, d4h, ...

Récupération:

  • p colle la dernière suppression
  • 3p colle 3x la dernière suppression
  • "5p Colle la 5eme suppresion
  • "1pu.u.u.u ... pour parcourire le buffer

Déplacement view:

  • Ctrl + F/B Défile d'un écran Down/Up
  • Ctrl + D/U Défile d'un demi-écran Down/Up
  • Ctrl + E/Y Défile d'une ligne Down/Up
  • zz Place le focus avec le curseur en milleur d'écran
  • z- Place le focus avec le curseur en bas d'écran
  • z + <Enter> Place le focus avec le curseur en haut d'écran

Recherche:

  • /Pattern Recherche du pattern vers le bas.
  • ?Pattern Recherche du pattern vers le haut.

Poser des marqueurs:

  • m[a-z] Place le marqueur
  • `[a-z] Retourne au marqueur [a-z]
  • '[a-z] Retourne au début de ligne indiqué par le marqueur [a-z]

note: Les marqueurs ne sont pas enregistrés dans le fichier, ils ne fonctionne que pendant la session courrante.

Replacement:

  • :s/<old>/<new>/ Remplace la prochaine occurence de 'old' par 'new' de la ligne
  • :s/<old>/<new>/g Remplace toutes les occurences de 'old' par 'new' de la ligne
  • :%s/<old>/<new>/g Remplace toutes les occurences de 'old' par 'new' du fichier
  • :%s/<old>/<new>/gc Pareil que précédant, mais avec demande confirmation pour chaque remplacement

Regex:

  • . Remplace 1 char
  • <char>* Remplace de 0 à x le char
  • ^<pattern> Impose que le pattern commence la ligne
  • <pattern>$ Impose que le pattenr termine la ligne
  • [<list>] Correspond si dans la liste
    • [aeiou] (a e i o u)
    • [A-Z] Le - permet de décrire un scoop (de A à Z)
    • [^,] Le ^ permet d'exclure un char (tous sauf la virgule)
    • [\[] Le \ permet déchaper un des char précédement cité (echape le [)

Commande Ex

Gestion de fichier

  • e<filename> Pour ouvir le fichier filename.
  • n Pour passer le focus dun fichier ouvert ver un autre.
  • args ar Pour afficher les fichiers ouverts

Affichage du fichier

  • :<n> Pour affichier la ligne n
  • :<n>,<m> Pour afficher les lignes de n à m ou n&m sont soit un chiffre, soit un . (pour la position courrante), soir un $ (pour la fin de fichier).

Deplacement copie et autre

  • :d Supprime la ligne courante.
  • :<lignes>d Supprime les lignes indiquées (12 12,. .-2,20).
  • :<lignes>m<dest> Move lines.
  • :<lignes>co<dest> :<lignes>t<dest> Copy lines.

Exemple:

:20,.+3m$ Déplace les lignes entre la 20em à la courante plus 3(.+3) en fin de fichier($).

Note:

diff entre n,+x et n;+x. Dans le 1er cas (,) le +x est calculé à partir dou se trouve le curseur, mais dans le cas du ; le curseur est déplacer à la ligner indiqué par le premier champ (n).

Recherche

  • :/<pattern> Positionne le curseur et affiche la 1ere ligne où se trouve le pattern
  • :g/<pattern> Affiche toutes les lignes contenant le pattern (le curseur se trouve sur la dernière ligne contenant le pattern)
  • :g!/<pattern> Affiche toutes les lignes NE contenant PAS le pattern (le curseur se trouve sur la dernière ligne ne contenant pas le pattern)

Exemple un peu complex:

  • :20,64g/<pattern> Affiche les lignes entre 20 et 64 qui contiennent le pattern.

Combinaison de commande

  • :exCmd | exCmd Permet d'enchainer 2 commandes ex. Si la 1er commande déplace le curseur, la seconde commande sera excécuté avec à partir du curseur déplacé.

vimrc

Coloration syntaxique

Activer la coloration syntaxique

 syntax on

Pour nettoyer les customisations des couleurs de la coloration syntaxique:

 if exists("syntax_on")
   syntax reset
 endif

Pour définir la couleur bleu pour les commentaires:

 hi Comment  ctermfg=blue

files info

Active la 'status bar':

 set laststatus=2

Defini le contenu de la 'status bar' avec le nom de fichier, sa taille, et la position L-cus/nL (Col):

 set statusline=%a\ %F%1*%m%*%10{getfsize(expand('%'))}o%10l/%L(%2c)

Mon .vimrc à moi

 """"" This is my custom .vimrc
 """ Plugins
 execute pathogen#infect()
 " NERDTree
 autocmd vimenter * NERDTree
 autocmd VimEnter * wincmd p
 autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
 map <C-t> :NERDTreeToggle<CR>
 
 """ Outfit Stuff
 set modeline
 " Colorize
 syntax on
 colorscheme elflord
 set hlsearch
 " Numberize and status bar
 set nu
 set laststatus=2
 set statusline=%a\ %F%1*%m%*%10{getfsize(expand('%'))}o%10l/%L(%2c)
 " tab -> spaces conversion and indent
 set tabstop=4
 autocmd FileType yaml     setlocal autoindent expandtab tabstop=2 softtabstop=2 shiftwidth=2
 autocmd FileType markdown setlocal autoindent expandtab tabstop=4 softtabstop=4 shiftwidth=4
 autocmd FileType python   setlocal autoindent expandtab tabstop=4 softtabstop=4 shiftwidth=4
 autocmd FileType python   set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class,with
 " Show trailing and non-breaking spaces
 set listchars=nbsp:·,trail:·
 set list
 highlight NbSp ctermbg=Red ctermfg=White
 match NbSp /\%xa0/
 
 """ Navigation Stuff
 " Move between window
 nmap <silent> <A-Up>    :wincmd k<CR>
 nmap <silent> <A-Down>  :wincmd j<CR>
 nmap <silent> <A-Left>  :wincmd h<CR>
 nmap <silent> <A-Right> :wincmd l<CR>
 
 "folding settings
 set foldmethod=indent   "fold based on indent
 set nofoldenable        "dont fold by default
 nnoremap <tab> za       "map toggle fold to Tab key

Commande Unix in Ex & Vi

  • ':!XXX Commencer une commande par un point d'exclamation donne accès a Unix, et permet d'exécuter des commandes Unix en restant dans Vi.

Lien intéressant