現在のファイル名を別のパスでコマンドラインに渡す方法


8

%コマンドラインでパス名を使用して特別なシンボルを機能させる方法はありますか?たとえば、私はしたいと思います:

:diffsplit Path\to\other\directory\%

@:同じ名前のファイルをすばやく比較できるようにするためです。ただし、これはと呼ばれる新しいバッファを開くだけ%です。

もちろん私はできる

:exe 'diffsplit Path\to\other\directory\'.expand('%')

しかし、コマンドを入力するときに完全なディレクトリにタブを付けることができないため、これは面倒です。

これを行う他の良い方法はありますか?

これは関連する質問ですが、私の状況には正確に対応していません。

編集:明確にするために、さまざまなファイルに対してコマンドを正確に再利用できるようにしたいと思います。そのため、コマンドラインで現在のファイルを単純に自動入力するソリューションは機能しません。同じコマンドが異なるファイル名で機能する必要があります。


D:あなたは%、そのようなことは、ファイル名に展開することを、そのかもしれないのヘルプのためのCMAPを使用することができます
SibiCoder

これには、ケントのソリューションと同じ問題があります。を押す%とすぐにファイル名が入力されますが、その行を再利用したい場合は、古いファイル名が残っています。%を使用すると、現在のファイル名を動的に挿入することができます。
Tumbler41 2016年

2
:diffsplit Path/to/other/directory/%:t
佐藤桂

うわー、試してみたのですが、その通りです。ありがとう!回答に入れたい場合は受け付けます。
Tumbler41

回答:


10

特殊文字(を参照:h cmdline-special)とファイル名修飾子(を参照:h filename-modifiers)はコマンドラインで展開されるため、次のようになります。

:diffsplit Path/to/other/directory/%:t

1

したがって、それは愚かなWindowsの問題であることがわかります。これに対する解決策は、パス名にスラッシュを使用することです。つまり、問題なく:diffsplit Path/to/other/directory/%動作します。

私のシステムset shellslashでは、Windowsでもデフォルトでスラッシュを使用するオプションを使用して、これを修正しました。


ええ、バックスラッシュはの特別な意味をエスケープするために使用さ%れ、Windowsのデフォルトのパス区切り文字です。Vimはあなたがどちらを考えていたかはわかりません。
Ingo Karkat 2016

ほら、そう思いました。だから私はできることを考えましたdirectory\\%が、それでもうまくいきませんでした。IDK、しかしスラッシュが問題を解決するので、私はそれは問題ではないと思います。
Tumbler41 2016

0

これで問題ないかわかりません。

:diffsplit Path/to/somewhere/<c-r>%

レジスタ値<C-r>を埋めるために、元のキーストロークにあと1つキーストロークを入力します%


これは@:、現在のファイル名を「ハードコード」するため、将来のファイルに使用することはまだできません。
Tumbler41 2016年

次に:Mydiff /path/to/there/、パスをタブ補完できるようにカスタムコマンドをラップします。これをコマンド/関数に渡すだけexec
Kent
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.