Como pular para o buffer de ls?

7

Existe alguma maneira de pular para um buffer digitando o número do buffer diretamente :ls?

Quero dizer, por que esse comando espera que Press ENTER or type command to continue, se pressionar por exemplo 2, não faça nada?

Obviamente, não vou instalar nenhum plugin, pelo menos um pequeno script .vimrc.

Obrigado.

kAldown
fonte

Respostas:

10

Sem alterar nada, a maneira mais rápida desse prompt é provavelmente pressionar :b+ número + Enter. Mas como um atalho, aqui está o que eu (e muitas outras pessoas) uso que me leva até lá no modo Normal:

:nnoremap <leader>ls :ls<cr>:b<space>

Você pode substituir <leader>lspor qualquer combinação de teclas do modo Normal não utilizada. Depois de pressionar as teclas, você verá a lista de buffers e poderá inserir o número + Entersem lidar com esse Press ENTER...prompt.

Atualização: o OP gostaria de substituir :lscompletamente. Isso pode ser feito com

:cnoremap ls ls<cr>:b<space>

mas isso não é recomendado, pois o mapeamento ocorrerá em qualquer lugar em que "ls" for digitado em um comando ou termo de pesquisa! (Agradecemos a Peter Rincker pelo aviso .) Embora você possa superar isso, digitando Ctrl+ Vantes de digitar "ls" em qualquer lugar (por exemplo, para pesquisar "montanhas" que você precisa fazer /hil^Vls), isso não é conveniente. É melhor escolher uma combinação de teclas que é improvável que ocorra em comandos ou termos de pesquisa. Na ajuda do Vim, eles têm um exemplo com "_ls" :cnoremap _ls ....

Camada B
fonte
Boa solução pensada. Mas é possível quebrar nativo :lspara :ls<cr>:b<space>(do seu exemplo). Quero dizer sobre substituir, em vez de acrescentar nova função. Graças
kAldown
Claro ... veja minha resposta atualizada.
Camada B
Tenha cuidado com os cmap, pois eles podem se expandir em outros "modos" da linha de comando, como pesquisa /,.
Peter Rincker
@ PeterRincker você estava certo, agora não consigo procurar :find utils, porque ele contém ls: D
kAldown
11
A ajuda do Vim sugere a digitação Ctrl-Vantes de você digitar qualquer um dos caracteres c-mapeados :find uti^Vls. Ainda é uma dor, mas ainda não vejo uma abordagem melhor. Talvez você possa mapear :lsxou :lsqse acostumar a usá-lo em vez de :ls. ("lsx" e "lsq" dificilmente aparecerão em comandos ou pesquisas da vida real.)
Camada B
1

Você pode obter um fluxo de trabalho próximo ao desejado, sem configurar o vim.

Você pode pular para o enésimo enésimo buffer usando <C-^>( ctrl+ 6).

Se você digitar um dígito enquanto visualiza a saída de ls, esse dígito é armazenado e pode ser passado para o próximo comando.

Para produzir as capturas de tela falsas do vim, aumentei o tamanho da fonte para poder ver apenas algumas linhas e definir os seguintes listchars.

execute("set listchars=eol:\xc2\xac,tab:>\\ ,trail:\xe2\x81\x9b,extends:>,precedes:<,space:\\ ") 

Então, se você faz

$ mkdir -p /tmp/vim-example
$ cd /tmp/vim-example
$ vim ./a ./b

Então sua tela ficará assim:

¬                                 
~                                 
~                                 
~                                 
~                                 
~                                 
./a              0,0-1         All
"./a" [New File] 

Você pode ver os arquivos pressionando :ls<cr>.

:ls                               
  1 %a   "./a"                    
      line 1                      
  2      "./b"                    
      line 0                      
Press ENTER or type command to con
tinue  

A partir daí, se você digitar 2e <C-^>será direcionado para o próximo buffer.

¬                                 
~                                 
~                                 
~                                 
~                                 
~                                 
./b              0,0-1         All
"./b" [New File]  
Gregory Nisbet
fonte