コマンドラインで編集用に現在のファイル名を表示します


10

コマンドラインで現在のファイルへのパスを表示して、同様のファイル名を入力するにはどうすればよいですか?現在のファイル名に置き換えられる省略形は必要ありません。ファイル名を編集し、ディレクトリパスを入力します。たとえば:edit、類似した名前のファイル、または類似したディレクトリにあるファイル

vim src/submodule/frontend/frobnicate2.c

次に、を編集し../trunk/src/submodule/frontend/frobnicate.c、を挿入../trunkおよび削除するだけで2、フルパスを再入力する必要はありません。

もちろん、シェルに戻ってそのコマンド履歴を使用することもできます。または、GUIを介してパスをコピーして貼り付けることもできますが、Vimを終了する必要がないより効率的な方法を探しています。

回答:


11

%自分で見つけたレジスタを挿入するだけでなく、を使用することもできます:edit %<Tab>

から:help cmdline-special

In Ex commands, at places where a file name can be used, the following
characters have a special meaning.  These can also be used in the expression
function `expand()`.

        %       Is replaced with the current file name.           :_% c_%

したがって、たとえば、次のように使用できます。

:edit %.orig

編集しますfile.txt.orig。たとえば、と入力し:e ../trunk/%、を押し<Tab>て相対パスを含むファイル名を取得し、を押してからを2押し<Enter>ます。

パスにいくつかの修飾子を追加して変更できます。私は:h特に便利であることがわかりました、それは現在のパスの「dirname」(またはVim-speakの「head」)を取得します。

:edit file/in/a/deeply/nested/subdirectory/here.txt
:edit %:h/in_same_dir_as_above.txt

:h複数回使用することもできます。例えば:

:edit %:h:h:h/file.txt

開くでしょう file/in/a/deeply/file.txt

あります:pあなたの完全なパスを与えると、あなたのケースにおいて有用である可能性がある:タイプ:e %:p、プレス<Tab>および編集パスは、必要に応じて。複数の修飾子を使用することもできます:e %:p:h。例:

:help filename-modifiers完全なリストについては、を参照してください。

注:の場合<Tab>、Vimはを展開し%ます。を使用すると<C-d>、Vimはを展開しません%(ただし%、パスの完了時には置き換えられます)。


5

ああ。「ファイル名」で検索:help :!それは簡単です:現在のファイル名を意味する特別なr egister を挿入することです。CTRL-R %%


1
したがって、あなたの答えに基づいて構築します:OPが要求したとおりに完全なパスを取得するには、次のようなことをしCtrl-r =expand('%:p')ます。これは=レジスタを使用します
lcd047

3

vim path変数を設定した場合は、:findコマンドの全機能、つまりファイル名のタブ補完(ディレクトリ部分を指定する必要なし!)

あなたの場合、次のようなもの

set path=./**

あなたが:fin frob<tab>働くために必要なすべてであるかもしれません。血みどろの詳細については、:help find:help file-searching


0

ここにあなたが試すことができるマッピングがあります:

cnoremap <a-q> <c-c>:let @a=expand('%')<CR>:<Up><c-r>a

これにより、現在のコマンドが保存され、レジスタ 'a'に現在のファイルの名前が設定されます。次に、最後のコマンドが呼び出され、「a」レジスタの内容が追加されます。もちろん、「a」レジスタに何か有用なものがあれば、これはそれを上書きします。

マップされた文字を別のものに変更したい場合があります。Altキーを使用したいのですが、一部の端末では機能しません。

Carpetsmokerが回答で指摘したように、関数呼び出しを次のように変更できます。

expand('%:p')

フルパスを強制します。


1
これは無意味にレジスタを抹消しますa。:この代わりのようなものを試してみてくださいcnoremap <M-q> <C-r>=fnameescape(expand('%:p'))<CR>
lcd047
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.