Vraag Hoe stuur ik opdrachtuitvoer naar vim in bash?


Ik probeer de uitvoer van een bash-opdracht om te leiden naar een nieuw bestand.

Als ik de pijp probeer zoals hieronder:

ls -la | vim

Bash laat me de fouten zien:

Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

Ik weet dat ik Vim kan openen en vervolgens kan gebruiken:

:r !ls -la

Maar is er een manier om dit in bash zelf te doen, zodat Vim wordt geopend en de uitvoer daar automatisch wordt geplakt?


68
2017-08-13 16:13


oorsprong




antwoorden:


Je kunt gebruiken procesvervanging (dit werkt ook met applicaties die niet kunnen lezen STDIN):

vim <(ls -la)

Of gebruik vim's functie om uit te lezen STDIN:

ls -la | vim -

111
2017-08-13 16:58



<(ls -la) is eigenlijk procesvervanging liever dan opdrachtvervanging. - Eliah Kagan
Ik hou echt van de optie van vim, het stelt me ​​in staat om de uitvoer eenvoudig te doorzoeken, te vinden en op te slaan van datafumps. - Josue Alexander Ibarra


Je bent heel dichtbij jezelf. Je miste slechts één personage.

ls -la | vim -

32
2017-08-13 16:18



Nou technisch gezien zijn het twee karakters. ;) - Cory Klein


Hier is een andere benadering, hopelijk om iemand iets nieuws te leren.

Als je dat commando kent :r !ls -la werkt binnen vim, je kunt het volgende doen om vim te openen en het de opdracht laten uitvoeren zodra het wordt geopend, rechtstreeks vanuit bash:

vim -c ':r! ls -la'

Dit is het equivalent van openen vim vervolgens het commando uitvoeren :r! ls -la. Dit zou met om het even welke moeten werken vim commando, waar het commando komt na de -c keuze.


15
2017-08-13 17:11





Je kunt vim vertellen om stdin te openen:

ls -la | vim -

11
2017-08-13 16:20





Als het je doel eenvoudigweg is om de uitvoer in een tekstbestand te krijgen, hoef je VIM niet aan te roepen. Bash kan het alleen met doen

ls -la > outputfile.txt

1
2018-03-24 15:44





setlocal buftype=nofile is een goede optie als u een alias gaat maken om te vervangen less:

seq 100 | vim +':setlocal buftype=nofile' -

Nu hoeft u de! Niet in te typen! stoppen.

Een andere optie is:

seq 100 | vim +'nnoremap q :quit!' -

dus je kunt afsluiten met alleen q<enter>.


0
2018-01-29 14:43



Goed idee. Absoluut korter dan zo lang typen! :) - kode