vim comando que fará: buff ou: e se o arquivo ainda não estiver no buffer?

3

basicamente meu fluxo de trabalho é o seguinte: Eu tenho um monte de janelas abertas usando splits em um terminal no vim regular. Às vezes eu tenho um arquivo aberto às vezes eu não costumo alternar entre :buf e :tag para obter o arquivo. Idealmente, eu gostaria de algo que funcionaria como :buf , mas se o arquivo não estiver no buffer atualmente, ele pré-formaria um :e .

Portanto, para simplificar:

Eu digito :buf e digito parte de um nome de arquivo e clico em <tab> ele me dá a correspondência para os arquivos e combina o máximo possível do arquivo se o arquivo que eu quero não estiver no buffer gostaria de ainda poder digitar esse nome de arquivo e fazer com que ele carregue o arquivo. Normalmente agora eu tenho que voltar e mudar o comando de um :buf [file] para um :e [file] .

Existe uma maneira de criar um comando que funcione como :buf , mas abra o arquivo se ele já não existir? A razão pela qual eu uso o :buf para começar é que ele limita o escopo para arquivos em certos diretórios e irá combiná-los ao clicar na aba. Espero ter explicado corretamente:).

Exemplo:

:buf FooX[tab]

mostra 4 arquivos e tem

:buf [very long path]/FooX

Agora, se o arquivo Exact com o prefixo FooX não for mostrado, ainda quero poder digitar FooXFileNotShown.cpp e fazer com que ele seja carregado como :e .

Agradecemos antecipadamente por sua ajuda.

    
por bjackfly 14.03.2014 / 15:53

2 respostas

1

:b[uffer] é usado apenas para acessar buffers abertos. O "escopo" de sua conclusão não está restrito a "determinados diretórios", mas aos buffers em sua lista de buffers / lista de argumentos. Você não pode usar esse comando para abrir um arquivo que ainda não foi aberto.

:e[dit] é usado para editar um arquivo e sua conclusão é "escopo" para os arquivos e diretórios diretamente sob o diretório de trabalho do Vim. Você pode limitar a lista de conclusão com a opção wildignore ( :help 'wildignore' ) ou usando o incrível curinga ** ( :help starstar ).

Quando você usa :e para editar um arquivo que já está na lista de buffers / lista de argumentos, o Vim não cria um novo buffer, mas muda para o buffer existente, agindo efetivamente como :b .

Então… Parece que você está um pouco confuso sobre o comportamento de :b e que você está simplesmente procurando por :e file<Tab> .

    
por 14.03.2014 / 17:17
1

Assim, você quer um comando com a conclusão de buffers existentes, que abrirá o buffer (se existente) ou edita o arquivo passado em vez de fornecer o erro E94: No matching buffer .

Que tal isso:

:command! -nargs=1 -complete=buffer Buf try | execute 'buffer' <q-args> | catch /^Vim\%((\a\+)\)\=:E94/ | execute 'edit' <q-args> | endtry

Os comandos personalizados devem começar com uma letra maiúscula, mas você deve usar o cmdalias.vim - Criar aliases para comandos do Vim plugin para sobrecarregar o comando :buf existente.

    
por 14.03.2014 / 20:50