Vim no OSX: Como fazer page-up / page-down / ir para a EOL através de um arquivo vim aberto no terminal?

28

Na massa, que é como eu principalmente usei o VIM, eu poderia fazer o seguinte:

  • Página para cima / baixo: usando a tecla nativa de página para cima / baixo. No Mac, a alternativa é Fn + Para cima / Para baixo, que não funciona no terminal (não rola dentro do arquivo vim, mas rola o buffer do terminal)
  • Da mesma forma, as teclas Fn + direita / esquerda não me levam ao início / fim da linha

Como emulo essa funcionalidade no Mac OS X?

TCSGrad
fonte
Isso poderia ajudar a esclarecer sua pergunta se você substituísse ou aumentasse "Fn + direita / esquerda" por "Casa / Fim", que é o que essas combinações de Fn fazem.
Chris Page

Respostas:

48

Esta não é uma questão específica para mac, é realmente uma questão vi.

No modo de navegação, ctrl-f rola uma página para baixo e ctrl-b rola uma página (pense em "F" ou "B" ou "B"). Ctrl-d rola metade da página e ctrl-u rola metade da página.

^ leva você ao início de uma linha e $ ao final. Eu sei, eu sei, mas há razões históricas para isso.

Aqui está uma boa dica sobre os controles do vi. O vi é um pouco misterioso, mas depois de internalizado, é o editor de texto mais rápido e mais rápido do mundo.

Dan Ray
fonte
1
"Esta não é uma questão específica para mac, é realmente uma questão vi." É principalmente sobre como configurar o mapa de teclas do aplicativo Mac OS X Terminal, mas acontece que a segunda parte da pergunta, sobre início / fim de linha, já possui um mapeamento no Terminal e uma solução possível é editar o mapa do vi para entende isso. Como alternativa, o mapa do teclado do Terminal pode ser editado.
Chris Page
16

As preferências padrão do terminal são mapeadas Shift- Page Upe Shift- Page Downpara as seqüências de caracteres que informam a programas como Vim e Emacs para rolar ( ESC [ 5 ~e ESC [ 6 ~).

Se você deseja que essas teclas enviem sequências de caracteres para o terminal sem o Shiftmodificador, você pode personalizar o mapa do teclado:

Terminal> Preferências> Configurações> [perfil]> Teclado

Se você fizer isso, recomendo que você inverta o significado do Shiftmodificador para essas chaves trocando os mapeamentos pelas chaves com e sem deslocamento, para que os comportamentos alternativos ainda estejam disponíveis. Além disso, consulte o menu Exibir , que contém comandos de rolagem que usam o Commandmodificador para que estejam disponíveis, independentemente do mapa do teclado do terminal.

Da mesma forma, Shift- Homee Shift- Endsão mapeados para ir para o início / fim da linha atual ( ESC [ He ESC [ F). Essas sequências são entendidas pelo Bash, mas você pode precisar personalizar o Vim para entendê-las ou editar os mapeamentos especificamente para o Vim. O Vim, o Emacs e alguns outros programas enviam uma sequência de escape para colocar o terminal no "Modo Cursor do Aplicativo", onde as teclas Home / End enviam ESC O He ESC O F, mas o Terminal (a partir do 10.9) não implementa esse comportamento. Portanto, você pode alterar o mapa do teclado para enviar esses outros códigos (o Bash também os entende). (Em outros sistemas operacionais, Homee Endsão usados ​​para o início / fim da linha, o Terminal fornece o Shiftmodificador para simetria.)

Control- Left Arrowe Control- Right Arrowtambém são mapeados para "mover para o início / fim de linha" por padrão, embora sejam diferentes dos mapeados para Shift- Homee Shift- End. Em vez disso, eles são mapeados para as sequências compatíveis com Emacs e Bash ESC [ 5 De ESC [ 5 C. Supondo que eles não estejam em uso pelo Vim, a abordagem mais simples seria personalizar o Vim para aceitá-los, usando ~ / .vimrc.

Observe que nas versões mais recentes do macOS, o Terminal não possui mais mapeamentos explícitos para Homee Endnas preferências por padrão. Em vez disso, possui um comportamento dinâmico em que as teclas são mapeadas automaticamente para o início / fim de linha quando a tela alternativa está ativa - por exemplo, ao usar um aplicativo de tela cheia como emacs, vim, screen ou tmux. Ao usar um programa orientado a linhas como um shell na tela principal, eles continuam a rolar a exibição do terminal por padrão. O Shiftmodificador inverte o comportamento.

Chris Page
fonte
@ MarkHu Eu cobri isso no último parágrafo.
Chris Page
Conforme coberto parcialmente no último parágrafo, os padrões podem ser diferentes / ausentes em outras versões do MacOS. Para 10.13.6, eu tinha que adicionar \033[5~(e ... 6.) Para PageDown / Up.
MarkHu
2

A solução mais fácil e melhor é n+ , onde nestá o número de linhas que você deseja diminuir e é a tecla para baixo.

Eu regularmente apenas faço 12+ e 22+ .

T.Woody
fonte
1

Eu estava acostumado com o Início / Fim, levando-me ao início e ao fim das linhas no modo Inserir (do uso no Windows e acho que Linux), que o Mac não suporta. Isso é particularmente irritante porque, quando estou usando o vim em um sistema remoto, também não consigo fazer isso facilmente. Após algumas tentativas e erros dolorosos, criei algumas .vimrclinhas que fazem a mesma coisa e, eventualmente, encontrei alguém que encontrou uma solução semelhante aqui:

https://coderwall.com/p/fd_bea

Apreciar.

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
user1442960
fonte