部分パスのZshのようなタブ補完


11

Vimでのファイル名のBashのような部分的なタブ補完に関連

の本当に素晴らしい機能の1つは、zshたとえばls /u/s/m/m/who.1を押しTabて、押して、まで完成させる ことができることですls /usr/share/man/man1/who.1.gz。慣れると/u<tab>/s<tab>/m<tab>/m<tab>...、特に部分パス全体が1つの実際のパスにしか解決できないが、個々のコンポーネントごとに複数の補完が存在する場合は、に戻るのは本当に面倒です。これはVimで実現できます:e:cd

zshには、他の便利なパス関連の機能があります。たとえば、を使用cd foo barして、にfoo置き換えられたbar(つまり、に/blah/foo/baz/yadaなる/blah/bar/baz/yada)同等のパスに移動します。これらも取り入れたソリューション(基本的には、シェルに関連するタスクを、それらを非常にうまく実行するシェルに引き継ぐ)があれば、すばらしいでしょう。


1
私はあなたが求めていることを正確に達成するものは何も知りませんが、同様の方法でファイルを開くことができるさまざまなファジーファイルファインダーがあります。私はCtrlPを好みますが、Command-Tもあり、名前を忘れている他のものもあると確信しています。
リッチ

1
@リッチタブを数十回もつぶす必要がない限り、私は幸せです。
muru

SO についてはすでに同様の質問があります。
romainl 2015

回答:


6

私は、vimのネイティブパワーを本当に発見するまで、かなり以前にCtrlPと他の関連プラグインを使用していました。外部プラグインを必要とせずにこれを行ういくつかの方法を説明しましょう:

  1. :e:eの良い点は、次のようなことができることです:e /u*/s*/m*/m*/<Tab>。vimはそれを自動的に拡張します:e /usr/share/man/man。それはあなたが投稿したものよりもはるかに短くて単純ですが、より良い方法はを行うことです。そうすれば:e /usr/**/man<Tab>、再帰的に調べ/usrてすべての一致するパスを一覧表示します。これは、セットの大きさにもよりますが、あなたは次のようなことを行うことができ:e ap**/jav**/user<Tab>、すべての不完全なパスを完成させ、一致するパスのリストを提供し、非常に素晴らしいので、これは不思議に機能します。
  2. :b、既存のバッファを開く。デフォルトでパーシャルを受け入れるので、これは本当に強力です。たとえば:b usr*man<Tab>、バッファリストに既にロードされている場合は、ファイル名を補完します。これは、ほぼ瞬時で非常に高速であるため、特に優れています。また、私はtpope / vim-obsessiondhruvasagar / vim-prosessionの助けを借りてvimセッションを頻繁に使用します。これにより、開いているすべてのファイルがバッファーリストに保持され、vimが存在し、そこから戻ってきた場合でも、それらを使用できます。プロジェクトディレクトリ。

1
/u*/s*/m*/m*/<Tab>以前はbashを回避する方法でした。これは、zshの代わりにはなりません。/usr/**/man<Tab>ファイルシステム全体を開いていると、処理速度は非常に遅くなりますが、小規模なプロジェクトでは役立つ場合があります。私が誤解しない限り:b、それは新しいファイルを開くためのものではありません。
muru、2015

@muruそうです、それはzshの代用ではありませんが、自分ですべてを入力する必要があるよりはまだましです**:b既存のオープンバッファ用です。そのため、セッションの使用が役立ちます。
Dhruva Sagar、2015

5

vim-zsh-path-completionは、あなたが求めていることを正確に実行することを意図しています(少なくとも最初の部分)が、私はそれを試したことはありません。(ドキュメントにはいくつかの制限も記載されていますが、romainlがその作者によるSOの回答にリンクするまで、私はそれを聞いたこともありませんでした。

これに加えて、ファイルを開くために同様のことを実行するさまざまなファジーファイルファインダーがあります。

このために私が好むプラグインはCtrlPです。オープニング・ファイル用に使用する場合、それはそのフルパスあなたが正しい中に入力することを文字を含むすべてのファイルを検索ため、あなたはしていない持っているあなたのように、パスのすべてのコンポーネント(およびすべてのパスセパレータ)の一部を入力しますあなたの例では持っていますが、そうすればそれは完全にうまくいきます。また、最近使用したファイルや現在開いているバッファなどを開くために同じインターフェイスを使用します。

デフォルトでは<c-p>、通常モードでマップしてCtrlPプロンプトを開きます。プロンプトにはファイルのリストが表示され、文字を入力すると絞り込まれます。あなたは押すことができEnter、現在選択されているファイル、または使用を開くために、任意の時点で<c-k><c-j>現在一致したファイルのリストを上下選択範囲を移動すること。

もう1つの一般的な代替手段はCommand-Tですが、VimScriptで実装されているため、私はCtrlPを好みます。Command-TにはRubyコンポーネントがあります。

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