スペースを含むファイル名補完


8

名前にスペースが含まれているファイルがたくさんあり、これが問題を引き起こしています。findコマンドのコマンドライン補完を実行しようとして、これらのファイルの1つが表示された場合、Vimはそれを検出しますが、スペースがエスケープされていないため、ロードされません。

例:私はすでにvimにいるので、次のように入力します

:find fo<Tab>

を完了するためにfoo bar.txt、Vimはそれを見つけて、ファイル名が1つだけであることを想定しているため、エラーをスローします。それが今読んだことの意味

:find foo bar.txt

ロードされません。

これを回避する方法はありますか?そしてVimに自動的にスペースをエスケープさせますか?

私はVim 7.3を実行するVimTouchを使用しています

編集:私は最近、Vimがパス名をエスケープすることに気付きましたが、不思議なことにファイル名はエスケープしません。


1
これはvim問題ではなくコマンドラインのようです(少なくとも、でvim何かを実行するのではなく、セッションを開くことについて話しているようですvim)。しかし、とにかく、主な"作品を配置するだろうか?あなたはタブ完全なファイルにしたい場合つまり、a bタイプvim "aして、タブではなくvim a、その後のタブ?(自分のvimとシェルの両方で、タブの完了時にスペースが自動的にエスケープされるため、
わかりません

1
正確に何をしているのですか?バッファはどのように見えますか?どのコマンドを使用しましたか?正確に起こったのですか?
Martin Tournoij、2016

質問を明確にするために編集しました。
ゴールドマン

回答:


1

:foo bar.txtを見つける

このコマンドは、vimでは不可能な2つのファイルを一度に検索します。これがエラーの原因です。

スペースが含まれているファイルを処理する場合、すべての単語の後に追加\できます

そのようです :find foo\ bar.txt

しかし、この方法はファイルがたくさんあるので少し厄介です

だから私はあなたのニーズに合うようにコマンドを変更しました

うまくいくことを願っています

.vimrcに追加します

そして、使用:Findスペースで開いているファイルを検索し、します

" :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

質問とは関係ありませんが、何らかの助けになるかもしれません

この問題は、スペースを含むファイルを保存するときにも発生します。

のような:w foo bar.txtエラーを与える

それを解決するには

" :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

これを.vimrcに追加して、スペースを含むファイルを使用:Wまたは:Save保存します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.