Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteProchaine révisionLes deux révisions suivantes |
informatique:vim [2021/02/20 13:26] – [Vim] alexis | informatique:vim [2021/11/30 05:23] – [Convertir en HTML] alexis |
---|
- [[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]] |
- [[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> |
| |
| |
===== 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</key> qui 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 ===== |
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> |
| |
</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">"</span><span class="Constant">Happy {self.event} {self.person}!</span><span class="Constant">"</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">"</span><span class="Constant">Happy {self.event} {self.person}!</span><span class="Constant">"</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> |
| |