%
"signifie" le fichier en cours"
Comme eugène y a souligné, %
"signifie "le nom du fichier en cours". Une autre utilisation de ce dans Vim est dans la substitution de commandes. Par exemple, :%s/foo/bar
"signifie"dans le fichier actuel, remplacer les occurrences de foo par bar." Si vous mettez du texte avant de taper :s
, vous verrez que les lignes en surbrillance prendre la place de %
que votre substitution de gamme.
:w
n'est pas mise à jour de votre fichier
Une partie confuse de cette astuce est que vous pourriez penser, :w
, c'est de modifier votre fichier, mais il ne l'est pas. Si vous avez ouvert et modifié file1.txt
, puis a couru :w file2.txt
, il serait un "enregistrer sous"; file1.txt
ne serait pas modifié, mais le contenu de la mémoire tampon devra être envoyé à file2.txt
.
Au lieu de file2.txt
, vous pouvez remplacer une commande shell pour recevoir le contenu de la mémoire tampon. Par exemple, :w !cat
va juste afficher le contenu.
Si Vim n'était pas courir avec sudo accès, de son :w
ne pouvez pas modifier un fichier protégé, mais si elle passe le contenu de la mémoire tampon à la coque, une commande dans le shell peut être exécuté avec sudo. Dans ce cas, nous utilisons tee
.
La compréhension de tee
Comme pour tee
, à l'image de l' tee
commande un T-en forme de pipe normale dans un bash de la tuyauterie de la situation: il dirige la sortie vers le fichier spécifié(s) et aussi envoie sur la sortie standard, qui peut être capturée par la prochaine canalisations de commande.
Par exemple, en ps -ax | tee processes.txt | grep 'foo'
, la liste des processus sera écrit dans un fichier texte et transmis grep
.
+-----------+ tee +------------+
| | -------- | |
| ps -ax | -------- | grep 'foo' |
| | || | |
+-----------+ || +------------+
||
+---------------+
| |
| processes.txt |
| |
+---------------+
(Diagramme créé avec Asciiflow.)
Voir le tee page de manuel pour plus d'info.
Té comme un hack
Dans la situation de votre question décrit, à l'aide de tee
est un hack parce que nous sommes en ignorant la moitié de ce qu'il fait. sudo tee
écrit à notre fichier et envoie le contenu de la mémoire tampon de sortie standard, mais nous ignorons la sortie standard. Nous n'avons pas besoin de passer quelque chose à l'autre, les canalisations de commande dans ce cas; nous sommes juste à l'aide de tee
comme une alternative de l'écriture d'un fichier et que nous pouvons appeler avec des sudo
.
Faire cette astuce facile
Vous pouvez ajouter ceci à votre .vimrc
à faire ce truc facile à utiliser: il suffit de taper :w!!
.
" Allow saving of files as sudo when I forgot to start vim using sudo.
cmap w!! w !sudo tee > /dev/null %
L' > /dev/null
partie explicitement jette la sortie standard, puisque, comme je l'ai dit, nous n'avons pas besoin de passer quelque chose à l'autre, les canalisations de commande.