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?
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:
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 ...
set -o vi
che 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).
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.
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.
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.txt
nonfile1.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 .xt
e 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 xt
e quindi puoi digitare i
per 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
Alt+B
s o a Ctrl+Alt+]
.
in modalità Emacs, quindi questo non mi sembra un esempio forte.
Up
, Ctrl+Alt+]
, .
, Right
, t
, Enter
= 8. Vi modalità: Up
, F
, .
, a
, t
, Enter
= 7. :)
Esc
anche lì, è un calore morto.
Non sono sicuro che esista un vantaggio diretto. Sono un vi
utente da più di 20 anni. Sono anche un screen
utente ancora più a lungo e di altri programmi che usano le vi
chiavi. È 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.
ssh
ing. Ovviamente, ciò non aiuta quando sto usando una macchina localmente che non contiene le mie .bashrc
cose.
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
.
Se ci si abitua vi
, quindi si imposta in modalità vi come editor di shell. Questa sarebbe la ragione ovvia. L'altro è quando il bash
non è 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
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.
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 :wq
e viene eseguito.
vi
modalità, ma è un cattivo esempio di codice bash. (1) L'uso dell'output da ls
come 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.