Vantaggi dell'utilizzo di set -o vi


55

Ho visto molti sviluppatori usare questo comando per impostare l'opzione su vi. Non ho mai capito il vero uso di questo?

Quando si usano i comandi bash, che aiuto fornisce il passaggio a vi?

Risposte:


58

Impostando la modifica readline su emacs (impostazione predefinita) o vi ( set -o vi), essenzialmente si standardizzano i comandi di modifica, attraverso la shell e l'editor di scelta 1 .

Pertanto, se si desidera modificare un comando nella shell, si utilizzano gli stessi comandi 2 che si farebbero se si fosse nel proprio editor di testo. Questo significa solo dover ricordare una sintassi del comando e (se non fosse abbastanza vantaggioso) probabilmente renderebbe la modifica in entrambi gli ambienti più veloce e meno soggetta ad errori ...

Puoi sfruttare ulteriormente questa relazione in modalità vi estraendo qualsiasi comando dalla cronologia della shell, premendo Escapeper accedere alla modalità di comando e poi premendo v, il che aprirà $ EDITOR con il comando caricato per un editing più complesso con la piena potenza di vim. Una volta terminata la modifica del comando in modo soddisfacente, :wqil comando viene eseguito nuovamente nella shell.


1. Supponendo, ovviamente, di utilizzare Emacs o Vi / m come editor.
2. O, più precisamente, un suo sottoinsieme ...


1
Ho ottenuto il Santo Graal
:)

3
Il trucco Esc-v è una delle migliori caratteristiche set -o viche la maggior parte delle persone non conosce. Ciò è particolarmente vero se si desidera emettere più volte lo stesso comando con argomenti diversi (come più comandi da riga di comando).
Michael Goldshteyn,

2
Il trucco Esc-v non è in realtà un vantaggio specifico di set -o vi. Sotto l'impostazione predefinita di set -o EMACS, Cx, Ce aprirà una finestra di emacs (o il $EDITOR, se impostato) in cui è possibile modificare il comando prima di eseguirlo.
John Gowers,

8

La modalità Vi è un enorme miglioramento dell'usabilità se si utilizza un client SSH mobile come ConnectBot per Android.

Ciò è dovuto alla ridotta dipendenza dai tasti modificatori.

Vim è molto più facile da usare con una tastiera virtuale su uno smartphone o un tablet rispetto a ... qualsiasi altra cosa, inclusi i metodi di modifica nativi integrati nell'interfaccia utente di Android. Ironia della sorte, è più semplice modificare le fonti C con Vim in una sessione SSH piuttosto che modificare, per esempio, un messaggio istantaneo con il widget di modifica della piattaforma a tale scopo.

La modalità Shell vi offre un vantaggio simile.


Speravo ci fosse la modalità vi sulla tastiera del mio telefono. Dici che è come se esistesse già. Come posso ottenere la modalità vi sul mio telefono?
Meh

6

Ti permette di modificare cose dalla riga di comando usando le modalità e le operazioni vi.

Un esempio aiuterà a renderlo molto più chiaro:

Tu digiti cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

ma si ottiene un errore - si dovrebbe avere digitato file1.txtnonfile1.xt

Senza questa opzione impostata, premi la freccia su e poi premi la freccia sinistra e lascia che si ripeta per ... 35 volte, fino ad arrivare a .xte poi digiti il ​​extra t. Tasti totali: 37 .

Con questa opzione impostata puoi (ad esempio) premere una volta la freccia su, quindi Esci per la modalità di comando, 0 per andare all'inizio della riga e poi /xt[return]per arrivare a xte quindi puoi digitare iper la modalità di inserimento e digitare la t mancante. Questo può sembrare follemente complicato sotto alcuni aspetti, ma se sei un utente VIM questi comandi sono già molto noti. Tasti totali: 9


1
Potresti anche usare qualche Alt+Bs o a Ctrl+Alt+] .in modalità Emacs, quindi questo non mi sembra un esempio forte.
Mikel

2
Visto che stiamo golf: modalità di Emacs: Up, Ctrl+Alt+], ., Right, t, Enter= 8. Vi modalità: Up, F, ., a, t, Enter= 7. :)
Mikel

@Mikel ti sei dimenticato che la modalità vi si avvia nella modalità Inserisci quindi hai Escanche lì, è un calore morto.
dragon788,

5

Non sono sicuro che esista un vantaggio diretto. Sono un viutente da più di 20 anni. Sono anche un screenutente ancora più a lungo e di altri programmi che usano le vichiavi. È naturale per me preferire impostare la modalità "vi" in bash. Ma lavoro anche su centinaia di server nel mio lavoro, la maggior parte sono impostati sulla modalità "emacs" predefinita. Quindi ho bisogno di usare entrambe le modalità. Ma è davvero solo una questione di preferenza.


Situazione simile per me - uso vim molto, ma ho sempre trovato meno lavoro per diventare esperto con i tasti readline predefiniti simili a emacs (che possono essere altrettanto convenienti del sottoinsieme vi) di quanto non sia per aggiungere un cambio di linea alla modalità vi su ogni nuovo sistema che incontro.
jw013,

1
Non lavoro su centinaia di server, ma uso sshrc per mantenere la mia configurazione bash simile tra computer diversi quando sshing. Ovviamente, ciò non aiuta quando sto usando una macchina localmente che non contiene le mie .bashrccose.
Kyle Strand,

4

Il vantaggio principale è la modifica modale della riga di comando. Se hai familiarità con Vim e ti piace la sua filosofia, i vantaggi devono essere ovvi. Se ne hai esperienza, la memoria muscolare del tuo dito ti farà modificare i tuoi comandi bash alla velocità della luce.

NB : Se non ti piace l'editing modale, dovresti comunque imparare a sfruttare la modalità (predefinita) emacs. Ecco alcune eleganti scorciatoie da tastiera che funzioneranno su qualsiasi processo con readline, come bash.


1

Se ci si abitua vi, quindi si imposta in modalità vi come editor di shell. Questa sarebbe la ragione ovvia. L'altro è quando il bashnon è disponibile per impostazione predefinita in alcuni sistemi operativi (principalmente UNIX come AIX, Solaris), quindi la funzionalità di cronologia della shell non è disponibile, quindi il modo in cui ottieni i comandi precedenti impostando l'editor della shell su vi, e Esc, Ctrl+ Ko Ctrl+L


1

Può consentirti di navigare e modificare facilmente la riga di comando utilizzando le scorciatoie di Vim, ad es. Passare rapidamente a una parola a destra, eliminare una parola.

Con le scorciatoie predefinite, quando devi andare fino alla fine della linea, devi Ctrl+ e, mentre con set -o vi, hai appena colpito $, come in vim.


1

Probabilmente in ritardo alla festa, ma per me usare la modalità vi riguarda di più quando si creano script interattivi ... per esempio

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

un esempio molto semplice di ciò che potrebbe essere piuttosto complicato .. l'utilizzo ESCkvti mette in una sessione vi in ​​cui puoi modificare lo script, e quindi :wqe viene eseguito.


1
Questo può essere un buon esempio dell'uso di bash in vimodalità, ma è un cattivo esempio di codice bash. (1) L'uso dell'output da lscome input per qualsiasi altro tipo di elaborazione è una cattiva idea. (2) La $(…)sintassi per la sostituzione dei comandi è ampiamente considerata più leggibile della `…`sintassi. (3) Dovresti sempre citare le variabili della shell a meno che tu non abbia una buona ragione per non farlo, e sei sicuro di sapere cosa stai facendo.
G-Man dice 'Reinstate Monica' 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.