Outils pour utilisateurs

Outils du site


informatique:vim

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
informatique:vim [2021/02/20 13:26] – [Vim] alexisinformatique:vim [2021/11/30 05:23] – [Convertir en HTML] alexis
Ligne 7: Ligne 7:
   - [[http://vim.wikia.com/wiki/Delete_all_lines_containing_a_pattern|Delete all lines containing a pattern - Vim Tips Wiki]]   - [[http://vim.wikia.com/wiki/Delete_all_lines_containing_a_pattern|Delete all lines containing a pattern - Vim Tips Wiki]]
   - [[http://mwop.net/blog/134-exuberant-ctags-with-PHP-in-Vim.html|exuberant ctags with PHP in Vim :: phly, boy, phly]]   - [[http://mwop.net/blog/134-exuberant-ctags-with-PHP-in-Vim.html|exuberant ctags with PHP in Vim :: phly, boy, phly]]
-  - [[http://superuser.com/questions/75130/how-to-remove-this-symbol-with-vim#75159|gvim - How to remove this symbol "^@" with vim? - Super User]] 
   - [[http://artisan.karma-lab.net/configurer-vim|http://artisan.karma-lab.net/configurer-vim]]   - [[http://artisan.karma-lab.net/configurer-vim|http://artisan.karma-lab.net/configurer-vim]]
   - [[http://artisan.karma-lab.net/vim-et-feuilles-style|http://artisan.karma-lab.net/vim-et-feuilles-style]]   - [[http://artisan.karma-lab.net/vim-et-feuilles-style|http://artisan.karma-lab.net/vim-et-feuilles-style]]
Ligne 25: Ligne 24:
   - [[http://linux-attitude.fr/post/Vimrc-collaboratif|Vimrc collaboratif - Linux Attitude]]   - [[http://linux-attitude.fr/post/Vimrc-collaboratif|Vimrc collaboratif - Linux Attitude]]
   - [[http://www.vim.org/|welcome home : vim online]]   - [[http://www.vim.org/|welcome home : vim online]]
 +  - [[https://thevaluable.dev/vim-beginner/|Vim for beginners]]
 +  - [[https://thevaluable.dev/vim-intermediate/|Vim for intermediate users]]
 +  - [[https://thevaluable.dev/vim-advanced/|A Vim Guide for Advanced Users]]
 </WRAP> </WRAP>
  
Ligne 73: Ligne 75:
  
 ===== Saisir des caractères de contrôle ===== ===== Saisir des caractères de contrôle =====
-Il peut être nécessaire de saisir ce type de caractères lors de l'utilisation de VI. Pour cela, il faut utiliser la combinaison suivante ''Ctrl+V'' puis ''Ctrl+<caractère>''. Par exemple : +Il peut être nécessaire de saisir ce type de caractères lors de l'utilisation de //vim//. 
-  * Il ne faut pas saisir ''^M'' mais ''Ctrl+V Ctrl+M''<code>:%s/^M//g</code> +Pour cela, il faut utiliser la combinaison <key>Ctrl+V</keyqui indique à //vim// de prendre le caractère qui suit tel quel. 
-  * Il ne faut pas saisir ''^@'' mais ''Ctrl+V Ctrl+2''<code>:%s/^@//g</code>+Certains caractères peuvent être insérés directement (la tabulation par exemple) ou en utilisant un code de contrôle (voir la [[https://en.wikipedia.org/wiki/C0_and_C1_control_codes|liste complète]]).
  
-Pour certain caractères, il est possible de se passer de ''Ctrl+V'' 
  
-Ces caractères sont encodés affichés selon la //caret notation//. Voir les [[https://en.wikipedia.org/wiki/C0_and_C1_control_codes|codes de contrôle C0 et C1]] pour la liste complète. Par exemple, ''^M'' correspond au caractère de retour chariot (//CR//) et ''^@'' correspond au caractère null (//NUL//).+^ Caractère      ^ Notation  ^ Séquence                                     ^ 
 +| Nul            | ''^@''    | <key>Ctrl+V</key> suivi de <key>Ctrl+2</key> | 
 +| Retour chariot | ''^M''    | <key>Ctrl+V</key> suivi de <key>Ctrl+M</key> | 
 +| Tabulation     ''^I''    | <key>Ctrl+V</key> suivi de <key>Tab</key>    | 
 + 
 +<WRAP info> 
 +Certain caractères peuvent être saisis sans utiliser la combinaison <key>Ctrl+V</key>. 
 +</WRAP> 
  
 ===== Appliquer une commande sur un ensemble de ligne ===== ===== Appliquer une commande sur un ensemble de ligne =====
Ligne 98: Ligne 107:
 Si on ne veut pas conserver le contenu modifié localement, il suffit de lancer la commande '':edit!'' ('':e!'' en notation courte). Si on ne veut pas conserver le contenu modifié localement, il suffit de lancer la commande '':edit!'' ('':e!'' en notation courte).
  
-===== Utiliser des regexp pour faire de la substitution =====+===== Substitution de texte ===== 
 + 
 +==== Utiliser des regexp ====
 Le fonctionnement des regexp est inversé par rapport à d'autre logiciel. Pour activer certains motifs, il faut utiliser le caractère d'échappement alors que d'habitude, il faut l'utiliser pour les désactiver. Le fonctionnement des regexp est inversé par rapport à d'autre logiciel. Pour activer certains motifs, il faut utiliser le caractère d'échappement alors que d'habitude, il faut l'utiliser pour les désactiver.
 <code bash> <code bash>
 # Pour supprimer ''n'' espaces suivi de ''|'' suivi de ''n'' chiffres # Pour supprimer ''n'' espaces suivi de ''|'' suivi de ''n'' chiffres
 :%s/\s\+|\d\+// :%s/\s\+|\d\+//
 +</code>
 +
 +==== Changer de casse ====
 +Le changement de casse ne peut se faire qu'avec l'utilisation de références arrières. Il est possible de :
 +  * Mettre en majuscule tout le texte qui suit : ''\U''. ((le changement s'effectue jusqu'à la fin de la ligne ou jusqu'au délimiteur (''\E'' ou ''\e'').))
 +  * Mettre en minuscule tout le texte qui suit : ''\L''. ((le changement s'effectue jusqu'à la fin de la ligne ou jusqu'au délimiteur (''\E'' ou ''\e'').))
 +  * Mettre en majuscule la première lettre du texte qui suit : ''\u''.
 +  * Mettre en minuscule la première lettre du texte qui suit : ''\l''.
 +
 +<code bash>
 +:%s/Test \(TeSt\) Test/Test \U\1 Test/ # Affiche "Test TEST TEST"
 +:%s/Test \(TeSt\) Test/Test \U\1\E Test/ # Affiche "Test TEST Test"
 +:%s/Test \(TeSt\) Test/Test \L\1 Test/ # Affiche "Test test test"
 +:%s/Test \(TeSt\) Test/Test \L\1\E Test/ # Affiche "Test test Test"
 +:%s/Test \(TeSt\) Test/Test \u\1 Test/ # Affiche "Test TeSt Test"
 +:%s/Test \(TeSt\) Test/Test \l\1 Test/ # Affiche "Test teSt Test"
 +</code>
 +
 +==== Chaîner des substitutions ====
 +Pour cela, il suffit juste d'utiliser ''|'' entre chaque commande de substitution. Si une erreur survient, les substitutions suivantes ne seront pas appliquées.
 +
 +<code bash>
 +:%s/htm/html/ | %s/JPEG/jpg/ | %s/GIF/gif/
 +</code>
 +
 +==== Utiliser une expression ====
 +Il est possible d'utiliser une expression comme chaîne de remplacement. Pour cela, la chaîne de remplacement doit commencer par ''\=''.
 +
 +<code bash>
 +# Ajouter le numéro de chaque ligne
 +:%s/^/\=line('.')."\t"/
 +
 +# Dupliquer la référence arrière en la modifiant
 +:%s/'\(.*\)'/\='"'.submatch(1).'" => "'.substitute(submatch(1),'_',' ', 'g').'",'/g
 </code> </code>
  
Ligne 119: Ligne 164:
 </code> </code>
 [[https://stackoverflow.com/questions/82726/convert-dos-line-endings-to-linux-line-endings-in-vim|Convert DOS line endings to Linux line endings in vim - Stack Overflow]] [[https://stackoverflow.com/questions/82726/convert-dos-line-endings-to-linux-line-endings-in-vim|Convert DOS line endings to Linux line endings in vim - Stack Overflow]]
 +
 +===== Convertir en HTML =====
 +Il est possible de convertir le contenu d'un fichier en HTML en utilisant ''TOhtml'' en mode visuel.
 +Il est possible de le faire également en mode CLI de la manière suivante :
 +<code bash>
 +# Convertir tout le fichier
 +vim -e <filename> -c "set nobackup" -c :TOhtml -c wq -c :q
 +
 +# Convertir une partie du fichier (de la ligne 10 à la ligne 20 incluse)
 +vim -e <filename> -c "set nobackup" -c :10,20TOhtml -c wq -c :q
 +</code>
 +
 +Avec l'utilisation du thème [[https://www.vim.org/scripts/script.php?script_id=1464|moria]], il est possible de changer la coloration syntaxique de base :
 +<code bash>
 +# Avec un arrière plan foncé
 +vim -e <filename> -c "set nobackup" -c "let moria_style='dark'" -c ":colorscheme moria" -c :TOhtml -c wq -c :q
 +
 +# Avec un arrière plan clair
 +vim -e <filename> -c "set nobackup" -c "let moria_style='light'" -c ":colorscheme moria" -c :TOhtml -c wq -c :q
 +</code>
 +
 +<WRAP tip>
 +Il est intéressant de pouvoir convertir le fichier HTML généré en image pour pouvoir l'inclure dans une documentation. Pour cela, il est possible d'utiliser ''wkhtmltoimage'', ''firefox'' en mode //headless// ou encore ''Puppeteer''.
 +</WRAP>
 +
 +<code python event.py>
 +class Card:
 +  def __init__(self, event, person):
 +    self.event=event
 +    self.person=person
 +
 +  def message(self):
 +    print(f"Happy {self.event} {self.person}!")
 +
 +card = Card('birthday', 'Charles')
 +card.message()
 +</code>
 +
 +<WRAP group>
 +<WRAP half column>
 +<code html event.py.dark.html>
 +<!DOCTYPE html>
 +<html>
 +<head>
 +<meta charset="UTF-8">
 +<title>~/event.py.html</title>
 +<meta name="Generator" content="Vim/8.2">
 +<meta name="plugin-version" content="vim8.1_v2">
 +<meta name="syntax" content="python">
 +<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
 +<meta name="colorscheme" content="moria">
 +<style>
 +<!--
 +pre { white-space: pre-wrap; font-family: monospace; color: #c0c0c0; background-color: #000000; }
 +body { font-family: monospace; color: #c0c0c0; background-color: #000000; }
 +* { font-size: 1em; }
 +.LineNr { color: #ffff00; }
 +.Constant { color: #ff40ff; }
 +.Identifier { color: #00ffff; font-weight: bold; }
 +.Statement { color: #ffff00; }
 +-->
 +</style>
 +
 +<script>
 +<!--
 +
 +/* function to open any folds containing a jumped-to line before jumping to it */
 +function JumpToLine()
 +{
 +  var lineNum;
 +  lineNum = window.location.hash;
 +  lineNum = lineNum.substr(1); /* strip off '#' */
 +
 +  if (lineNum.indexOf('L') == -1) {
 +    lineNum = 'L'+lineNum;
 +  }
 +  var lineElem = document.getElementById(lineNum);
 +  /* Always jump to new location even if the line was hidden inside a fold, or
 +   * we corrected the raw number to a line ID.
 +   */
 +  if (lineElem) {
 +    lineElem.scrollIntoView(true);
 +  }
 +  return true;
 +}
 +if ('onhashchange' in window) {
 +  window.onhashchange = JumpToLine;
 +}
 +
 +-->
 +</script>
 +</head>
 +<body onload='JumpToLine();'>
 +<pre id='vimCodeElement'>
 +<span id="L1" class="LineNr"> 1 </span><span class="Statement">class</span> <span class="Identifier">Card</span>:
 +<span id="L2" class="LineNr"> 2 </span>  <span class="Statement">def</span> <span class="Identifier">__init__</span>(self, event, person):
 +<span id="L3" class="LineNr"> 3 </span>    self.event=event
 +<span id="L4" class="LineNr"> 4 </span>    self.person=person
 +<span id="L5" class="LineNr"> 5 </span>
 +<span id="L6" class="LineNr"> 6 </span>  <span class="Statement">def</span> <span class="Identifier">message</span>(self):
 +<span id="L7" class="LineNr"> 7 </span>    <span class="Identifier">print</span>(f<span class="Constant">&quot;</span><span class="Constant">Happy {self.event} {self.person}!</span><span class="Constant">&quot;</span>)
 +<span id="L8" class="LineNr"> 8 </span>
 +<span id="L9" class="LineNr"> 9 </span>card = Card(<span class="Constant">'</span><span class="Constant">birthday</span><span class="Constant">'</span>, <span class="Constant">'</span><span class="Constant">Charles</span><span class="Constant">'</span>)
 +<span id="L10" class="LineNr">10 </span>card.message()
 +</pre>
 +</body>
 +</html>
 +<!-- vim: set foldmethod=manual : -->
 +
 +</code>
 +{{:informatique:vim:event.py.dark.jpg}}
 +</WRAP>
 +<WRAP half column>
 +<code html event.py.light.html>
 +<!DOCTYPE html>
 +<html>
 +<head>
 +<meta charset="UTF-8">
 +<title>~/event.py.html</title>
 +<meta name="Generator" content="Vim/8.2">
 +<meta name="plugin-version" content="vim8.1_v2">
 +<meta name="syntax" content="python">
 +<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=,use_input_for_pc=fallback">
 +<meta name="colorscheme" content="moria">
 +<style>
 +<!--
 +pre { white-space: pre-wrap; font-family: monospace; color: #000000; background-color: #ffffff; }
 +body { font-family: monospace; color: #000000; background-color: #ffffff; }
 +* { font-size: 1em; }
 +.LineNr { color: #af5f00; }
 +.Constant { color: #c00000; }
 +.Identifier { color: #008080; }
 +.Statement { color: #af5f00; }
 +-->
 +</style>
 +
 +<script>
 +<!--
 +
 +/* function to open any folds containing a jumped-to line before jumping to it */
 +function JumpToLine()
 +{
 +  var lineNum;
 +  lineNum = window.location.hash;
 +  lineNum = lineNum.substr(1); /* strip off '#' */
 +
 +  if (lineNum.indexOf('L') == -1) {
 +    lineNum = 'L'+lineNum;
 +  }
 +  var lineElem = document.getElementById(lineNum);
 +  /* Always jump to new location even if the line was hidden inside a fold, or
 +   * we corrected the raw number to a line ID.
 +   */
 +  if (lineElem) {
 +    lineElem.scrollIntoView(true);
 +  }
 +  return true;
 +}
 +if ('onhashchange' in window) {
 +  window.onhashchange = JumpToLine;
 +}
 +
 +-->
 +</script>
 +</head>
 +<body onload='JumpToLine();'>
 +<pre id='vimCodeElement'>
 +<span id="L1" class="LineNr"> 1 </span><span class="Statement">class</span> <span class="Identifier">Card</span>:
 +<span id="L2" class="LineNr"> 2 </span>  <span class="Statement">def</span> <span class="Identifier">__init__</span>(self, event, person):
 +<span id="L3" class="LineNr"> 3 </span>    self.event=event
 +<span id="L4" class="LineNr"> 4 </span>    self.person=person
 +<span id="L5" class="LineNr"> 5 </span>
 +<span id="L6" class="LineNr"> 6 </span>  <span class="Statement">def</span> <span class="Identifier">message</span>(self):
 +<span id="L7" class="LineNr"> 7 </span>    <span class="Identifier">print</span>(f<span class="Constant">&quot;</span><span class="Constant">Happy {self.event} {self.person}!</span><span class="Constant">&quot;</span>)
 +<span id="L8" class="LineNr"> 8 </span>
 +<span id="L9" class="LineNr"> 9 </span>card = Card(<span class="Constant">'</span><span class="Constant">birthday</span><span class="Constant">'</span>, <span class="Constant">'</span><span class="Constant">Charles</span><span class="Constant">'</span>)
 +<span id="L10" class="LineNr">10 </span>card.message()
 +</pre>
 +</body>
 +</html>
 +<!-- vim: set foldmethod=manual : -->
 +</code>
 +{{:informatique:vim:event.py.light.jpg}}
 +</WRAP>
 +</WRAP>
  
informatique/vim.txt · Dernière modification : 2022/09/28 04:21 de alexis