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

23

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

  • Page up / down: usando a tecla para cima / baixo da página nativa. No Mac, a alternativa é Fn + Up / Down, 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 para o início / fim da linha

Como emular esta funcionalidade no Mac OS X?

    
por TCSGrad 15.09.2011 / 08:47

4 respostas

41

Isso não é especificamente uma pergunta do mac, essa é realmente uma pergunta do vi.

No modo de navegação, ctrl-f rola uma página e ctrl-b rola uma página (pense em "F" orward e "B" ack). Ctrl-d rola meia página e ctrl-u rola meia página.

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

Aqui está uma folha de fraude realmente boa sobre os controles do vi. vi é um pouco arcaico, mas uma vez que você o internaliza, é o editor de texto mais rápido e mais liso do mundo.

    
por 15.09.2011 / 14:47
14

Mapa de preferências padrão do terminal Shift - Page Up e Shift - Page Down para as seqüências de caracteres que informam programas como Vim e Emacs para rolar ( ESC [ 5 ~ e ESC [ 6 ~ ).

Se você quiser que essas chaves enviem seqüências de caracteres para o terminal sem o modificador Shift , você poderá personalizar o mapa do teclado:

Terminal > Preferences > Settings > [profile] > Keyboard

Se você fizer isso, recomendo que você inverta o significado do modificador Shift para essas chaves, trocando os mapeamentos das teclas deslocadas e não-deslocadas, para que os comportamentos alternativos ainda estejam disponíveis. Além disso, consulte o menu Visualizar , que contém comandos de rolagem que usam o modificador Comando para que estejam disponíveis, independentemente do mapa do teclado do terminal.

Similarmente, Shift - Início e Shift - Fim são mapeados para mover para o início / fim de a linha atual ( ESC [ H e ESC [ F ). Essas seqüências são entendidas pelo Bash, mas você pode ter que customizar o Vim para entendê-las, ou editar os mapeamentos especificamente para o Vim. O Vim, o Emacs e alguns outros programas enviam uma seqüência de escape para colocar o terminal em “Application Cursor Mode”, em que as teclas Home / End enviam ESC O H e ESC O F , mas o Terminal (a partir de 10.9) não implementa esse comportamento . Então você pode querer mudar o mapa do teclado para enviar esses outros códigos (Bash também os entende). (Em outros sistemas operacionais, Home e End são usados para o início / fim da linha, então o Terminal fornece o modificador Shift para simetria.)

Controle - Seta para a esquerda e Controle - Seta para a direita também são mapeados para "mover para o início / fim de linha "seqüências por padrão, embora sejam diferentes daquelas mapeadas para Shift - Início e Shift - Fim . Em vez disso, eles são mapeados para as seqüências compatíveis com Emacs e Bash ESC [ 5 D e ESC [ 5 C . Supondo que eles não estejam sendo usados pelo Vim, a abordagem mais simples seria personalizar o Vim para aceitá-los usando ~ / .vimrc.

Note que em versões mais recentes do macOS, o Terminal não possui mais mapeamentos explícitos para Início e Fim nas preferências por padrão. Em vez disso, ele tem um comportamento dinâmico em que as chaves mapeiam automaticamente para o início / fim de linha quando a tela alternativa está ativa - por exemplo, ao usar um aplicativo de tela inteira como emacs, vim, screen ou tmux. Ao usar um programa orientado a linhas como um shell na tela principal, eles continuam a rolar a visualização do terminal por padrão. O modificador Shift inverte o comportamento.

    
por 15.09.2011 / 09:27
1

Eu estava acostumado com o Home / End me colocando no início e no fim das linhas no modo Insert (do uso no Windows e no 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 fazê-lo facilmente. Depois de algumas tentativas e erros dolorosos, eu criei algumas .vimrc linhas que fazem a mesma coisa e, eventualmente, encontrei alguém que criou uma solução semelhante aqui:

link

Aproveite.

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
    
por 02.08.2014 / 23:59
1

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

Eu faço apenas 12 + e 22 + .

    
por 10.09.2018 / 08:06