Vous n'êtes pas identifié(e).
Pages : 1
Rien de plus. La première ligne ne sert qu'à ce que le souci que j'essaye de mettre en lumière ne soit visuellement évident, mais on pourrait la retirer, ça ne changerait pas grand chose à ce que je vais essayer d'exposer ici. La seconde, en revanche, est celle qui pose problème.
Avec ce réglage de base, si on ouvre un fichier qui se trouve être indenté par des espaces, qu'on choisit une ligne indentée, et qu'on va à la ligne, à partir du moment où le nombre d'espaces à recopier depuis la ligne d'au dessus est supérieure ou égale à la taille d'une tabulation (8 par défaut, je sais que ça se règle mais ce n'est pas le propos ici) Vim va automatiquement convertir ces espaces en tabulation en recopiant l'indentation. Et va donc se mettre à coller des tabs au milieu d'espaces, ce qui n'est pas top.
Il existe un moyen simple de l'empêcher de faire ça, qui est de rajouter cette commande :
Ce faisant, Vim va tout faire pour éviter les tabulations : l'appui sur la touche concerné va insérer autant d'espaces à la place ; et quand on fera un saut de ligne, il recopiera les espaces proprement, sans rien y changer, et donc tout ira pour le mieux.
…du moins, tant qu'on ne manipule que des fichiers indentés par des espaces. Si en revanche, avec ce réglage, on ouvre un fichier qui contenait des tabulations, celles-ci seront bel et bien présentes… mais dès qu'on lui demandera d'ajouter une ligne dans ce fichier, Vim, comme on le lui a demandé, refusera d'y mettre des tabulations, et remplacera celles-ci par des espaces. Et donc, de nouveau, on se retrouvera à mélanger les deux, ce qui n'est toujours pas top.
On a donc a priori deux comportements possibles :
– Soit Vim s'entête à fiche des tabulations chaque fois qu'il le peut, peu importe qu'il y ait des espaces ou pas,
– Soit Vim refuse catégoriquement de fiche des tabulations, et mettra donc des espaces, peu importe qu'il y ait des tabulations ou pas.
Ce qui me semble d'autant plus problématique que Vim est à ma connaissance le seul éditeur à avoir ce comportement étrange : tous ceux à part lui qui gèrent l'auto-indentation se contentent de bêtement recopier ce qu'on trouve à la ligne d'au dessus sans chercher à remplacer les tabs par des espaces ou les espaces par des tabs, ce qui soit dit en passant est quand même sacrément plus simple, comme façon de faire.
Je n'ai trouvé, jusque là, que deux manières de régler le souci :
– Soit laisser cette conf' minimale en l'état, et aller manuellement taper « :set expandtab » chaque fois qu'on a besoin d'éditer un fichier qui se trouve être indenté par des espaces pour éviter que Vim y cause des soucis, ce qui est quand même un peu lourd,
– Soit recourir à des solutions du type « un fichier de conf' spécifique par projet/type de fichiers à éditer », ce qui ne me semble pas tellement plus satisfaisant, au sens où il s'agit de rajouter des tonnes de conf' spécifiques pour ajuster le comportement aberrant en fonction de la situation, donc de résoudre un problème de comportement trop complexe en ajoutant encore plus de complexité.
Vim est un logiciel plutôt cool par ailleurs et ça m'embêterait de le jeter juste pour ça ; mais n'empêche que dans pas mal de cas, je préfère ouvrir un autre éditeur juste pour un comportement de base qui ne marche pas sur la tête au niveau de l'indentation.
Pour avoir déjà abordé le sujet avec pas mal de monde, je suis conscient du fait qu'un certain nombre d'entre vous auront envie de réagir en disant que, comme eux n'utilisent exclusivement que des tabs ou que des espaces, le problème ne se pose pas pour eux. Sauf que ça ne me paraît pas spécialement aider.
Donc voilà, si vous avez une autre idée que ça, je veux bien
(P.S.: je sais qu'il existe également un « smartindent » un peu différent de l'« autoindent » dont je parle ici. Sauf erreur de ma part, ce dernier essaye d'être encore plus interventionniste en ajoutant ou retirant automatiquement un niveau d'indentation en fonction de ce qui précédait, mais sans rien changer au souci de fond. Ce n'est donc pas ce qui m'intéresse ici. D'ailleurs, d'une manière générale, chaque fois, jusque là, qu'un logiciel a essayé d'être intelligent à ma place, ça s'est plutôt mal passé, et c'est plus ou moins le cas ici.)
Elzen: polisson, polémiste, polymathe !
Hors ligne
Ou selon la version de vim :
Pour que ça fonctionne, tu dois aussi ajouter la directive suivante à ton vimrc :
Dernière modification par Beta-Pictoris (06-05-2020 19:25:05)
Hors ligne
Elzen: polisson, polémiste, polymathe !
Hors ligne
Hors ligne
Dernière modification par Anonyme (06-05-2020 20:16:21)
Et du coup je viens de voir qu'il existe le plugin editorconfig pour vim : https://github.com/editorconfig/editorconfig-vim
Plus d'info sur editorconfig : https://editorconfig.org/
Greffon qui a le bon goût d’être fourni via les dépôts Debian : vim-editorconfig
Pour du boulot collaboratif, c’est ce que j’ai trouvé de mieux jusqu’ici.
Hors ligne
Dernière modification par Beta-Pictoris (06-05-2020 20:34:43)
Hors ligne
La version multi-lignes propre :
Dernière modification par Cauryl (06-05-2020 21:05:20)
Dernière modification par Elzen (06-05-2020 21:22:25)
Elzen: polisson, polémiste, polymathe !
Hors ligne
Hors ligne
Elzen: polisson, polémiste, polymathe !
Hors ligne
Copy indent from current line when starting a new line (typing <CR>
in Insert mode or when using the "o" or "O" command). If you do not
type anything on the new line except <BS> or CTRL-D and then type
<Esc>, CTRL-O or <CR>, the indent is deleted again. Moving the cursor
to another line has the same effect, unless the 'I' flag is included
in 'cpoptions'.
When autoindent is on, formatting (with the "gq" command or when you
reach 'textwidth' in Insert mode) uses the indentation of the first
line.
When 'smartindent' or 'cindent' is on the indent is changed in
a different way.
The 'autoindent' option is reset when the 'paste' option is set.
{small difference from Vi: After the indent is deleted when typing
<Esc> or <CR>, the cursor position when moving up or down is after the
deleted indent; Vi puts the cursor somewhere in the deleted indent}.
Si tu n’as pas une autre option en train d’interférer, comme par exemple "smartindent" ou "filetype plugin indent on", mais que "autoindent" n’active pas ce comportement pour autant, il s’agit possiblement d’un bug.
Hors ligne
Elzen: polisson, polémiste, polymathe !
Hors ligne
Hors ligne
Pages : 1