Passaggio da terminale a vim per un dattilografo
Recentemente ho iniziato a scrivere a tocco perché pensavo che potesse aiutarmi nel mio lavoro e aumentare la mia produttività (attualmente sono un programmatore, a volte modifico file di testo). Spesso mi trovo a passare da vim a terminale per eseguire un comando o aprire un file diverso.
Mi chiedevo, come fate voi ragazzi a muovere le mani su tutta la tastiera quando premete i tasti freccia per ottenere comandi nel terminale dalla cronologia (quello che di solito faccio è modificare alcuni file con vim, compilare, eseguire, se non lo fa lavoro torno alla modifica di vim, quindi salva / chiudi e il tasto freccia su per ottenere la compilazione ed eseguire i comandi dalla cronologia). L'unico problema è che non riesco a tenere le mani sulla riga di casa (ovviamente perché devo spostarmi sui tasti freccia).
Come fanno i dattilografi ad aggirare questo problema? C'è qualche trucco che potrei perdere?
PS: Se c'è qualche strumento che potrebbe permettermi di non lasciare mai vim, o altri strumenti che pensi potrebbero aiutarmi, per favore fatemelo sapere.
PSS: la shell che sto utilizzando attualmente è zsh.
Risposte
Scorciatoie dalla shell
non "devi" usare i tasti freccia per usare la cronologia in shell come zsh.
<c-p>comando della cronologia precedente.<c-n>comando della cronologia successivo.<c-r>ricerca nella cronologia.
oppure puoi aggiungere alcuni miglioramenti:
- usa fzf invece della normale ricerca nella cronologia.
- cambiare
fzfscorciatoie. - Modificare le
zshscorciatoie, se necessario (Ho solo aggiunto<c-t>e<c-s>per spostare uno indietro parola e indietro, perché non mi piace per passare daAlteCtrlchiavi, e ho quasi mai bisognotranspose-chars). - correre
bindkey -vinzshper ottenere scorciatoie vim-like.
tieni presente che anche io "baro" molto per rendere i tasti freccia più facili da usare:
- Uso una tastiera speciale chiamata Ergodox EZ , è sdoppiata, ortogonale, ergonomica, programmabile, con diversi tasti su ogni pollice. E con questa tastiera, posso facilmente stampa
<Up>,<Down>,<Esc>,Super(chiave finestra) eecon il mio pollice sinistro,<Left>,<Right>,<Return>,Ctrle, ovviamente,<Space>con il pollice destro, quindi non ho davvero avere problemi con l'utilizzo tasti freccia un paio di volte. - Ho il mio layout di tastiera, con 8 livelli, invece di 4 (posso premere
Shift,Altgre la chiave del diritto di accesso loro), e ho alcuni altri tasti freccia sulevel5. Posso anche bloccare (conISO_Level5_Lock) questo livello se devo premere i tasti freccia solo per pochi minuti. - Uso
TMUX, con scorciatoie per andare in un altro riquadro o per rifare l'ultimo comando nel riquadro successivo mentre rimango dove sono. - Con
vim,:!può essere utilizzato per eseguire un comando di shell. - Con
neovim, c'è unaterminalmodalità.
Per aggiungere alla risposta esistente:
Per shell in particolare:
- Uso i tasti vi in bash (
set -o vi) e zsh (bindkey -vcon alcune chicche extra), quindi non tocco le frecce così tanto (Escape + jk funziona) - Inoltre, il Ctrl- rinverso ricerca incrementale è buono
- Uso massiccio di tmux, con collegamenti più simili a vi
Per vim:
- Mappatura facile da eseguire
:suspend - Facile mappatura da eseguire
:terminal(in realtà, per alcune lingue avvia una sostituzione, in base alla mia configurazione, ma altrimenti viene impostata come predefinita su una shell; vedere vim-simpl ) - Con tmux, posso aprire facilmente una nuova shell ovunque non sia collegata a vim, quindi ho molte opzioni.
Quindi la risposta breve è: lascio sicuramente vim (non è un Emacs in cui devi essere 24 ore su 24, 7 giorni su 7), ma preferisco che tutto il resto sembri un po 'come vim (perché le mie dita ora vivono per le chiavi di vim).
Un'altra opzione è usare tutta la potenza di Vim per i comandi del terminale.
Basta inserire:
q:
e si apre il riquadro diviso in cui è possibile inserire i comandi del terminale anteponendoli a !(premere invio per eseguire). È Vim, quindi navigazione, modifica, ricerca ecc. Funzionano come previsto (questa è in realtà la cronologia dei :comandi)
Uso principalmente Python (non è necessaria la compilazione) quindi tendo ad avere questo flusso di lavoro:
scrivere il codice nel
.pyfileeseguire il file corrente utilizzando
:!clear && python3 %osservare il risultato
premi Invio e torna nel file corrente
La prossima volta che ho bisogno di eseguire il file, inserisco:
q:kk<enter>
dove kkdenota la navigazione un paio di righe in alto nella cronologia a seconda di quanti :comandi sono stati emessi tra le diverse esecuzioni di file (per raggiungere il comando che ho dato in precedenza per eseguire il file).
Se sono sicuro che non ce n'è stato nessuno, ripeterò l'ultimo comando con:
:!!
Apportare regolazioni / modificare i comandi nella cronologia è molto semplice in quanto questo è Vim "completo". Per esempio, cerca il comando nella cronologia con /, naviga ntra le corrispondenze, apporta modifiche in modalità normale o inserisci testo aggiuntivo in modalità di inserimento sulla riga appropriata e premi invio.
Per quanto riguarda il terminale, in aggiunta alle combinazioni di tasti suggerite da vi ho aggiunto indizi visivi per distinguere tra le diverse modalità.
Su MacOS ho aggiunto queste righe al mio .bashrc:
# set vi navigation and jj as switch to normal
set -o vi
bind '"jj":vi-movement-mode'
E per visualizzare +(modalità di inserimento) o :(modalità normale) all'inizio del prompt ho aggiunto quanto segue a .inputrc:
set editing-mode vi
set show-mode-in-prompt on
set vi-ins-mode-string \1\e[6 q\2 +
set vi-cmd-mode-string \1\e[2 q\2 :
Il mio prompt è molto minimalista, uno dei seguenti, a seconda della modalità in cui mi trovo:
: >
+ >