Conclusão de nome de arquivo com espaços

8

Eu tenho muitos arquivos que têm espaços em seus nomes, e isso está me causando problemas. Se eu tentar concluir a linha de comando para o comando find, e um desses arquivos aparecer, o Vim o encontrará, mas não será carregado porque os espaços não escapam.

Exemplo: eu já estou no vim e digito

:find fo<Tab>

Para concluir foo bar.txt, o Vim o encontra e gera um erro porque espera apenas um nome de arquivo. O que significa agora

:find foo bar.txt

O que não carrega.

Existe alguma maneira de contornar isso e o Vim escapar automaticamente dos espaços?

Estou usando o VimTouch, que executa o Vim 7.3

Edit: Eu percebi recentemente que o Vim escapará de nomes de caminhos para mim, mas misteriosamente não o fará para nomes de arquivos.

Um homem de ouro
fonte
1
Parece ser uma linha de comando e não um vimproblema (pelo menos, parece que você está falando sobre abrir uma vimsessão em vez de executar algo vim); mas, enfim, colocaria um "trabalho de liderança ? Ou seja, se você deseja tab-complete o arquivo a b, digite vim "ae então tab, em vez de vim ae, em seguida, tab? (Eu não tenho certeza, porque, tanto a minha força e minha concha, o espaço é escapado automaticamente quando guia completar.)
LSpice
1
Você pode elaborar exatamente o que está fazendo? Como é o seu buffer? Quais comandos você usou? O que exatamente aconteceu?
Martin Tournoij 07/12/19
Eu editei a pergunta para esclarecê-la.
A Gold Man

Respostas:

1

: encontre foo bar.txt

Este comando procurará 2 arquivos de uma vez, o que não é possível no vim. Essa é a causa do seu erro.

Ao lidar com arquivos que possuem espaço, você pode anexar\ após cada palavra

igual a :find foo\ bar.txt

Mas esse método é um pouco estranho, pois você tem muitos arquivos

então eu modifiquei um comando para atender às suas necessidades

Espero que funcione

Adicione-o ao seu .vimrc

e use :Findpara pesquisar e abrir arquivos com espaços

" :Find will escape a file name and open it
command! -bang -nargs=* Find :call Find(<q-bang>, <q-args>) 
function! Find(bang, filename) 
    :exe "find".a:bang." ". fnameescape(a:filename) 
endfu

Não está relacionado à pergunta, mas pode ser de alguma ajuda

Esse problema também é enfrentado ao salvar arquivos com espaço neles

como :w foo bar.txtdá erro

Para resolver isso

" :W and :Save will escape a file name and write it
command! -bang -nargs=* W :call W(<q-bang>, <q-args>) 
command! -bang -nargs=* Save :call Save(<q-bang>, <q-args>)

function! W(bang, filename) 
    :exe "w".a:bang." ". fnameescape(a:filename) 
endfu

function! Save(bang, filename) 
    :exe "save".a:bang." ". fnameescape(a:filename) 
endfu

Adicione isso ao .vimrc para usar :Wou :Savesalvar arquivos com espaços.

Ashok Arora
fonte