Inserisci l'output di un comando di sistema nella posizione corrente in vim


33

In verità, quando uso

:r !ls somefilename

inserisce l'output di quel comando su una nuova riga sotto la riga corrente.

Se lo faccio

let @a = system("ls")

e più tardi

"ap

inserisce comunque l'output su una nuova riga sotto la riga corrente.

C'è un modo per fare in modo che vim inserisca l'output nella posizione corrente?


Fare riferimento a questa risposta utile Eseguire la riga corrente in bash da vim
Rohan Ghige il

Risposte:


14

È possibile incollare il contenuto del buffer degli Appunti tra caratteri con Ctrl-R * in modalità inserimento (e un approccio simile per altri buffer). Quindi, se riesci a ottenere il comando di sistema in un buffer, dovresti essere impostato. (Fonte: https://stackoverflow.com/questions/1491135/paste-multi-line-string-into-gvim-at-cursor-position ).

:let @a=system("ls -l")inserirà l'output di ls -lin register a. È quindi possibile incollarlo (in modalità inserimento) con ^R-a.


Inoltre, sulla maggior parte delle piattaforme gli Appunti sono sincronizzati con un registro (di solito *), quindi se si inoltra l'output del comando negli Appunti, sarà possibile "*utilizzarlo.
Bruno Bronosky,

39
:r !command 

leggerà l'output dal comando e lo inserirà nella riga sotto la riga corrente. In questo modo vi è programmato che non è possibile modificare il comportamento.

Ma dì se sei nella riga numero 3. Se ci provi :r !date. Inserirà il valore della data nella riga numero 4.

Se si desidera che il valore della data venga visualizzato sulla riga numero 3, si tenta di :2r !dateinserire il valore della data nella riga numero 3.


4
Ciò si inserisce su una riga diversa, ma sempre su una riga a sé stante. Voglio inserirlo nella posizione corrente!
deshmukh,

13

Ecco un modo alternativo di incollare l'output dal comando esterno prima del cursore:

:exe 'norm i' . system("ls -l")

o usa expression register ( :help @=):

"=system('ls -la')

quindi colpire P. O in breve:

<CTRL-R>=system('ls -la')<CR>

4
Questa è la risposta
Jacob

1
Concordato! Questa dovrebbe davvero essere la risposta corretta, perché include una soluzione più programmatica (con :exe) che può essere inclusa nei comandi.
metasoo il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.