Vim in OSX: Come fare pagina su / pagina giù / andare a EOL attraverso un file vim aperto nel terminale?


28

In putty, che è il modo in cui ho usato principalmente VIM, ho potuto fare quanto segue:

  • Pagina su / giù: usando il tasto Pagina su / giù nativo. In Mac, l'alternativa è Fn + Su / Giù, che non funziona nel terminale (non scorre all'interno del file vim, ma scorre il buffer del terminale)
  • Allo stesso modo, i tasti Fn + destra / sinistra non mi portano all'inizio / alla fine della riga

Come posso emulare questa funzionalità in Mac OS X?


Potrebbe aiutare a chiarire la tua domanda se hai sostituito o aumentato "Fn + destra / sinistra" con "Home / End", che è quello che fanno quelle combinazioni Fn.
Chris Page

Risposte:


48

Questa non è specificamente una domanda mac, questa è davvero una domanda vi.

In modalità navigazione, ctrl-f scorre verso il basso di una pagina e ctrl-b scorre verso l'alto di una pagina (pensa "F" in avanti e "B" ack). Ctrl-d scorre verso il basso di mezza pagina e ctrl-u scorre verso l'alto di mezza pagina.

^ ti porta all'inizio di una riga e $ alla fine. Lo so, lo so, ma ci sono ragioni storiche per questo.

Ecco un ottimo cheat-sheet sui controlli vi. vi è un po 'arcano, ma una volta che lo interiorizzi, è l'editor di testo più veloce e fluido del mondo.


1
"Questa non è specificamente una domanda mac, questa è davvero una domanda vi." Si tratta principalmente di come impostare la mappa dei tasti dell'applicazione Terminale di Mac OS X, ma risulta che la seconda parte della domanda, sull'inizio / fine della linea, ha già una mappatura nel Terminale e una possibile soluzione è modificare la mappa di vi in capiscilo. In alternativa, è possibile modificare la mappa della tastiera del Terminale.
Chris Page

16

Le preferenze predefinite di Terminal sono mappate Shift- Page Upe Shift- Page Downalle sequenze di caratteri che indicano ai programmi come Vim ed Emacs di scorrere ( ESC [ 5 ~e ESC [ 6 ~).

Se si desidera che questi tasti inviino sequenze di caratteri al terminale senza il Shiftmodificatore, è possibile personalizzare la mappa della tastiera:

Terminale> Preferenze> Impostazioni> [profilo]> Tastiera

Se lo fai, ti consiglio di invertire il significato del Shiftmodificatore per questi tasti scambiando le mappature per i tasti spostati e non spostati, in modo che i comportamenti alternativi siano ancora disponibili. Inoltre, consulta il menu Visualizza , che contiene i comandi di scorrimento che utilizzano il Commandmodificatore in modo che siano disponibili indipendentemente dalla mappa della tastiera del terminale.

Allo stesso modo, Shift- Homee Shift- Endsono mappati per spostarsi all'inizio / alla fine della riga corrente ( ESC [ He ESC [ F). Queste sequenze sono comprese da Bash, ma potresti dover personalizzare Vim per capirle o modificare le mappature specificatamente per Vim. Vim, Emacs e alcuni altri programmi inviano una sequenza di escape per mettere il terminale in "Modalità cursore applicazione", dove i tasti Home / End inviano ESC O He ESC O F, ma Terminale (a partire da 10.9) non implementa questo comportamento. Quindi potresti voler cambiare la mappa della tastiera per inviare questi altri codici (anche Bash li capisce). (Su altri sistemi operativi Homee Endvengono utilizzati per l'inizio / fine della linea, quindi Terminal fornisce loro il Shiftmodificatore per la simmetria.)

Control- Left Arrowe Control- Right Arrowsono inoltre mappati per impostazione predefinita sulle sequenze "sposta all'inizio / fine della linea", sebbene siano diversi da quelli associati a Shift- Homee Shift- End. Invece, sono mappati alle sequenze compatibili con Emacs e Bash ESC [ 5 De ESC [ 5 C. Supponendo che questi non siano utilizzati da Vim, l'approccio più semplice sarebbe quello di personalizzare Vim per accettarli, usando ~ / .vimrc.

Si noti che nelle versioni più recenti di macOS, Terminal non ha più mappature esplicite per Homee Endnelle preferenze per impostazione predefinita. Al contrario, ha un comportamento dinamico in cui i tasti mappano automaticamente l'inizio / la fine della riga quando è attiva la schermata alternativa, ad esempio quando si utilizza un'applicazione a schermo intero come emacs, vim, screen o tmux. Quando si utilizza un programma orientato alla linea come una shell nella schermata principale, continuano a scorrere la vista del terminale per impostazione predefinita. Il Shiftmodificatore inverte il comportamento.


@MarkHu L'ho trattato nell'ultimo paragrafo.
Chris Page

Come spiegato parzialmente nell'ultimo paragrafo, le impostazioni predefinite possono essere diverse / mancanti in altre versioni di MacOS. Per 10.13.6, ho dovuto aggiungere \033[5~(e ... 6.) Per PageDown / Up.
MarkHu

2

La soluzione più semplice e migliore è n+ , dove si ntrova il numero di righe che si desidera ridurre, ed è il tasto giù.

Faccio regolarmente solo 12+ e 22+ .


1

Ero abituato a Home / End portandomi all'inizio e alla fine delle linee in modalità Inserisci (dall'uso in Windows e penso che Linux), che Mac non supporta. Questo è particolarmente fastidioso perché quando sto usando VIM su un sistema remoto, non riesco nemmeno a farlo facilmente. Dopo alcuni dolorosi tentativi ed errori, ho escogitato alcune .vimrclinee che fanno la stessa cosa, e alla fine ho trovato qualcun altro che ha trovato una soluzione simile qui:

https://coderwall.com/p/fd_bea

Godere.

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
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.