Comment utiliser un canal pour éditer un fichier avec vi


15

Disons que j'ai un fichier appelé file.txt. Il contient le nom d'un fichier que je souhaite modifier avec vi. Je veux faire quelque chose comme ça pour pouvoir éditer le fichier:

cat file.txt | vi

Mais ça ne marche pas. Comment ceci peut être fait?

Pour clarifier les choses:

Voici le contenu de file.txt:

textfile

Je veux donc en quelque sorte envoyer le contenu de file.txt à vi afin que la même chose se produise que lors de la frappe vi textfile.

Le contenu de file.txt peut changer. Je veux que vi modifie le fichier répertorié dans file.txt.


Je ne pense pas que vi = vim. Je ne sais pas si cela fait une différence pour cette question, mais votre balise est trompeuse.
soandos

Je pense qu'il y a peut-être plus à votre question que vous essayez de poser. L'ouverture d'un fichier nommé arbitrairement est l'utilisation de base de vi. à savoir: vi file.txt. Y a-t-il quelque chose de plus avancé que vous essayez de faire?
camster342

vi démarre vim sur OSX et sur d'autres systèmes Linux modernes.
tony_sid

J'essaie actuellement de modifier un fichier dont le nom est stocké dans le presse-papiers OSX. Taper pbpaste affichera le nom du fichier. J'essaie d'éditer ce fichier sans avoir à le taper, mais en utilisant tout ce qui est stocké dans le presse-papiers. Linux n'a pas pbpaste, mais c'est essentiellement la même chose que d'obtenir la sortie du nom de fichier cat.
tony_sid

installez xclippuis utilisez xclip -opour accéder au presse-papiers sur le shell en x11. juste au cas où vous auriez besoin de remplacer pbpaste...
akira

Réponses:


9

vous pourriez essayer ceci:

% vi `cat file.txt`

ou, pour éviter l'utilisation du chat par useles:

% vi `< file.txt`

vous dites vi (m) juste un tas de choses arbitraires. si vous voulez que vi (m) fasse quelque chose comme 'hé, ouvrez ce fichier' vous devez lui donner les mêmes commandes que vous utiliseriez dans vi (m), par exemple. quelque chose comme :e foo.txt. mais c'est juste plus compliqué que de faire ce que j'ai proposé.


Ça n'a pas marché.
tony_sid

4
ce sont des crochets, vous les avez tapés correctement? ils ouvrent un sous-shell, exécutent le «chat» ... si cela ne fonctionne pas, essayez vi $(cat file.txt)
akira

Oh ok, ça marche maintenant. THX.
tony_sid

23

Au moins pour vim (pas sûr de vi), vous pouvez faire

cat file.txt | vim -

Le «-» indique à vim de lire depuis stdin.


1
Désolé, mais ce n'est pas la bonne réponse. Cela ouvre vim avec le contenu «fichier texte». L'intervenant souhaite que vim ouvre lui-même le «fichier texte». Je dévaloriserais mais malheureusement je n'ai pas assez de réputation ici.
scubbo

scubbo a raison! Ma réponse est plus utile pour simplement diffuser quelque chose depuis stdin.
Jeff
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.