Como remapear gg para g?

8

Eu não uso nenhum, g combinationsexceto ggno modo normal. Como posso fazer para que pressionar guma vez seja suficiente?

nnoremap g ggfaz com que espere por 3 segundos ou mais por uma continuação do comando. Remover o mapeamento de gantemão também não funciona, porque não consigo mapear ggse remover o mapeamento g. Devo remover o mapeamento de todas as combinações que não são gg?

Peret Finctor
fonte
7
Só porque você não usa nenhum gmapeamento agora, não significa que você não o usará no futuro. Existem alguns bastante úteis lá. por exemplo gE, g_, gt, gT, g,, g;, gu, gU, gn, e meu pessoal favorito gf. Veja :h gpara uma lista de todos os mapeamentos g.
Peter Rincker
Oh sim, gf é incrível. Mas não preciso disso com muita frequência agora. Talvez eu mude para uma tecla de atalho separada quando precisar. (Nossos nomes são tão hilariantes que me pergunto se olhei para o seu quando escolhi o meu).
Peret Finctor 02/12/2015
E eu quero que vim e menos se comportem da mesma forma, se possível. Menos usa um único g.
Peret Finctor 02/12/2015
3
Eu provavelmente usar gva cada 90 segundos ou assim
the_velour_fog
1
Existem também alguns plugins cujos mapeamentos padrão começam com g, como gcnos comentários . Você também deve considerar que você vai correr para fora das chaves se você continuar usando Vim por um longo tempo, e isso leva algum tempo / esforço para treinar sua memória muscular depois de se acostumar com um determinado mapeamento.
MMontu

Respostas:

22

Supondo que você tenha uma versão mais recente do Vim (7.3.1261+), você pode usar <nowait>

nnoremap <nowait> g gg

Embora eu não possa enfatizar a utilidade de alguns dos gmapeamentos. Aqui está uma pequena lista de gmapeamentos úteis :

  • gE - movimento de fim de palavra para trás
  • g_ - até o último caractere não em branco de uma linha
  • gt& gT- guia de navegação
  • g,& g;- para frente e para trás através da lista de alterações
  • gu& gU- mudança de caso
  • gn - seleciona visualmente o padrão atual
  • gv - selecione novamente a seleção visual anterior
  • gi - iniciar o modo de inserção na mesma posição O modo de inserção foi parado pela última vez
  • gf - ir para o arquivo abaixo do cursor (Meu favorito)

Veja :h gpara uma lista de todos os gmapeamentos.

Pessoalmente, eu aprenderia a usar gg, pois é um bom hábito e menos não é conhecido por ser um bom emulador de Vi / Vim.

Para obter mais ajuda, consulte:

:h g
:h :map-nowait
Peter Rincker
fonte
9
gitambém é bastante fantástico (entre no modo de inserção onde você o deixou anteriormente). Eu o uso o tempo todo quando estou digitando uma linha de código e tenho que verificar alguma coisa em outro lugar no arquivo.
Doorknob
1
Sim. É como pessoas que mapeiam wpara :w<CR>e qpara :qall<CR>porque é "mais rápido". Você está apenas roubando os benefícios do vim.
precisa
@Chargin oh, então eu não sou o primeiro. Você sabe mais sobre esse tipo de remapeamento, pode me redirecionar para essas pessoas?
Peret Finctor
2
@PeretFinctor Não tenho certeza se você está brincando - meu argumento é que esse tipo de remapeamento é uma péssima idéia. As pessoas que fazem isso estão apenas tentando usar o vim como um editor comum; w,, qe gtodos oferecem funcionalidades extremamente abrangentes que você deveria usar frequentemente durante a edição, mas que está suprimindo para reduzir frações de segundo ao salvar. Não sei você, mas economizo com muito menos frequência do que avançar uma palavra!
wchargin
1
@PeretFinctor: Por que você não usa w / W eb / B para avançar e voltar a palavra, da maneira que o Vim fornece fora da caixa? - Você vê o padrão aqui? Você tenta lutar com o Vim. Mova-se com ele, use as coisas que ele fornece conforme são fornecidas. Ele vai ser mais fácil dessa maneira, e mais benéfico para o seu fluxo de trabalho a longo prazo.
DevSolar
7

Apenas para entrar, se você realmente quer uma única chave - você ainda pode usar ... outra (por exemplo, uma chave que você não precisa muito)! Dessa maneira, você pode deixar o gprefixo útil em paz.

Por exemplo, você pode "sobrecarregar" 0para alternar entre 0e ^funcionalidade, quando pressionado repetidamente e liberar ^para seu uso (já que é um personagem de subida intuitivo ).

Tenho certeza de que isso não é perfeito, mas aqui está uma possível prova de conceito rápida-e-suja:

function! ToStartOrNonBlankToggle(mode)
    if (a:mode == 'x')
        normal! gv
    endif
    let sp = col('.')
    normal! ^
    let ep = col('.')
    if (sp == ep)
        normal! 0
    endif
endfunction

nnoremap <silent> 0 :<c-u>call ToStartOrNonBlankToggle('n')<cr>
onoremap <silent> 0 :<c-u>call ToStartOrNonBlankToggle('o')<cr>
xnoremap <silent> 0 :<c-u>call ToStartOrNonBlankToggle('x')<cr>
noremap <silent> ^ gg

O acima ainda permite usar 0 como movimento e também no modo visual. Em uma linha recuada, y0agora copiaria da posição do cursor para o primeiro caractere que não estiver em branco. Se você deseja copiar para a coluna inicial, precisará visual:v00y

Agora você também pode usar 13^para ir para a linha 13.

VanLaser
fonte
1
Essa é realmente uma boa ideia, obrigado!
Peret Finctor 02/12/2015