J'ai lu comment mettre à jour la ligne d'état de vim ici . Et je suis en mesure de le mettre à jour avec succès.
Mais, je voudrais conserver le format de la ligne d'état par défaut de vim et y ajouter quelques informations supplémentaires, par exemple la taille du fichier, le type de fichier, etc.
La ligne d'état par défaut de Vim est:
<file-name> line_num,col_num %file
Comment pourrais-je faire ce qui suit?
- Je voudrais ajouter des informations après le nom du fichier
- Afficher le format actuel de la ligne d'état (
:set statusline
n'affiche rien)
J'ai essayé:
set statusline+=%y
Mais cela écrase toute la ligne d'état et affiche simplement le type de fichier ( %y
).
Des indices?
Réponses:
Comme l'a dit @muru, il ne semble pas possible de simuler exactement la ligne d'état par défaut lorsqu'elle
statusline
est définie comme le code de rendu qui fait des choses qui ne peuvent pas être spécifiées dans lestatusline
paramètre. Il est cependant possible de se rapprocher assez près. Voici une approximation raisonnable de l'apparence de la ligne d'état par défaut lorsqu'elleruler
est activée:La principale différence est le positionnement des numéros de ligne et de colonne. S'il est possible de simuler la logique d'espacement par défaut, je n'ai pas été en mesure de trouver un moyen de le faire. Ce sera peut-être assez proche de vos besoins.
J'utilise une version divisée de celle-ci
.vimrc
pour placer les informations de la ligne d'état Syntastic au milieu de ce qui ressemble à une ligne d'état vim normale avec une règle:la source
Le code ne définit aucune valeur sur une chaîne d'état vide, mais agit simplement en utilisant certaines valeurs par défaut. Voir
src/screen.c
, fonctionwin_redr_status()
. Les éléments affichés sont basés sur des fonctionnalités compilées, donc pour reconstruire la ligne d'état exacte, il faudrait regarder les fonctionnalités compilées. Il pourrait être plus simple d'utiliser l'exemple de ligne d'état donné dans:h statusline
:la source
%-14.(%l,%c%V%)
?tl; dr
Bien que ma solution suggérée ne diffère pas beaucoup de celle des autres réponses, je voudrais partager une explication plus détaillée.
comportement d'origine
Voyons d'abord comment
vim
dessine la ligne d'état. Les fonctions responsables sontwin_redr_status()
etwin_redr_ruler()
.vim
prend le tampon nom , ajoute un espace s'il y a des drapeaux à suivre (comme[Help]
,[Preview]
,[+]
,[RO]
). Ensuite, il ajoute les drapeaux .Normalement, il alloue 18 cellules de caractères à la règle. Si la partie du nom du tampon ne correspond pas au reste de l'espace disponible, il la
vim
tronque à gauche et l'ajoute<
au début.S'il y a de la place pour le clavier , il l'ajoute à la fin (aligné à droite).
Maintenant, la règle. Il se compose d'une
<row>,<col>-<virtcol>
partie et de la position relative (aligné à droite).Il existe également une restriction selon laquelle la partie portant le nom du tampon doit occuper au moins la moitié de la largeur .
Solution
Prenons maintenant la valeur suggérée par les documents :
où
Ainsi, le premier
%<
peut être omis, car par défaut, le nom du tampon est tronqué au début. Ensuite, il manque l'indicateur de prévisualisation (%w
). De plus, lorsque la fenêtre a moins de18 * 2
caractères de large, la partie droite occupe plus de la moitié de la ligne d'état.Donc, au moins, nous pouvons omettre
%<
et ajouter%w
:Nous pouvons aller plus loin et nous assurer que la bonne partie ne prend pas plus de la moitié de la ligne d'état:
Ensuite , nous pouvons faire dépendre des caractéristiques
vim
a été compilé avec .Mais je dirais que ce n'est pas pratique, et la solution précédente suffirait pour la plupart des intentions. Cependant, si la dernière solution ne fonctionne pas pour vous, dites-moi ce qui ne va pas et j'essaierai d'en trouver une meilleure.
Le problème avec la solution suggérée par Laurence Gonsalves est que s'il n'y a pas de drapeaux, il y a deux espaces entre les parties gauche et droite:
la source