La commande «set» affecte-t-elle uniquement le tampon actif?

14

J'ai deux tampons dans vim:

:ls
  1 %a   ".vimrc"                       line 1
  2 #h   "script.sh"                    line 1
Press ENTER or type command to continue

Comme vu ci-dessus, je suis sur le premier tampon. Maintenant, si j'exécute la :set softtabstop=16commande, je m'attends à ce qu'elle affecte les deux tampons. Cependant, ce n'est pas le cas - alors que la stsvaleur du premier tampon est en effet modifiée et que la Tabtouche insère quatre caractères de tabulation ( ts=4), alors pour le deuxième tampon, la stsvaleur est toujours 4:

:ls
  1 #h + ".vimrc"                       line 1
  2 %a + "script.sh"                    line 1
  softtabstop=4
Press ENTER or type command to continue

Pourquoi est-ce si? Je pensais que cela setaffecte tous les tampons et setlocalaffecte uniquement le tampon actif ..

Martin
la source

Réponses:

25

Les options peuvent être globale , fenêtre locale ou tampon local .

Lorsque vous :setune option globale , la nouvelle valeur est globale .

Lorsque vous :setlocalune option globale , la nouvelle valeur est locale .

Lorsque vous :setune option locale , la nouvelle valeur est locale .

softtabstopétant une option de tampon local , la modification de sa valeur n'affecte que le tampon actuel.

La "portée" d'une option est indiquée dans :help option:

'softtabstop' 'sts'    number    (default 0)
                       local to buffer
                       {not in Vi}
Number of spaces that a <Tab> counts[...]

:help local-options, :help :setlocalEt :help global-localexpliquer tout cela dans plus de détails.

romainl
la source
3
Il y a aussi un :setglobal.
Sato Katsura
3
De plus, certaines options sont globales, peu importe comment vous les définissez. Par exemple 'encoding'.
Antony
Existe-t-il un moyen de définir la fonction locale par l'ID du tampon et la valeur de l'option avec certains vimscriptappels de fonction?
St.Antario
Il existe une fonction setbufvarqui peut être utilisée pour y parvenir. Je ne l'ai pas trouvé au début.
St.Antario
2

Pas un expert, @Martin, mais à la lecture, :help setvous devrez "désactiver" la valeur locale de stschaque tampon pour que ce tampon récupère toute nouvelle valeur globale. setlocal sts= (ou pour les drapeaux booléens, setlocal flag<). Un peu logique, les paramètres locaux initialisés aux valeurs globales actuelles à l'ouverture, puis gardez les valeurs locales jusqu'à indication contraire. S'il n'y a pas de paramètre local en jeu, il devrait récupérer toutes les nouvelles valeurs globales.

Encore une fois, n'étant pas un expert, je risquerais de deviner que ce deuxième tampon avait un paramètre local explicite avant le dernier set. Plus de 50/50 que ma compréhension est fausse, car je ne sais toujours pas quelle est la différence entre setet setglobalest .

Brian Tiffin
la source