現在のファイルの完全なパスを表示するにはどうすればよいですか?


123

Vimでファイルを編集しているときに、現在のファイルのパスを表示するコマンドはありますか?プロジェクト内に同じ名前のファイルが複数ある場合、これは非常に便利です。

回答:


143

を押すことができます{count}Ctrl-G

{count}CTRL-G       Like CTRL-G, but prints the current file name with
                    full path.  If the count is higher than 1 the current
                    buffer number is also given.

を押し1てからCtrl+ Gを押すと、現在のファイルのフルパスが表示されます。{count}が1より大きい場合、バッファ名も表示されます。

Ctrl+ のみを押すとG、コメントでJasperが指摘したように、Vimの現在の作業ディレクトリからの相対パスが表示されます。)

で次のコマンドを使用し.vimrcて、ステータスラインにフルパスを追加できるため、常に表示されます。

set statusline+=%F

4
Ctrl+G「vimのcwdに対する相対パス」のようなものではありませんか?
ジャスパー

@Jasper良いキャッチ!答えを更新しました。
thameera

4
思わC-gのデフォルトであり0C-g、そして2C-g示すバッファ以外にも(1から始まる)インデックス番号。

あなたの答えに賛成票を投じて100番目になれることを嬉しく思います!これをありがとう1C-g
ボールト

53

Register %には、現在のファイルの名前が含まれています。

次のコマンドを入力して、表示される情報を表示できます。

:echo @%                |" directory/name of file
:echo expand('%:t')     |" name of file ('tail')
:echo expand('%:p')     |" full path
:echo expand('%:p:h')   |" directory containing file ('head')

指名手配されているすべては、現在のファイルの名前を表示するタイプする場合:f/ :lsまたはプレスCtrl- g(フルパスプレス用1、その後Ctrl- g)。

挿入モードでは、タイプはCtrl- rそして、%現在のファイルの名前を挿入します。

次のコマンドは、現在のファイルと代替ファイルの絶対パスで構成される行をバッファーに挿入します。

:put =expand('%:p')
:put =expand('#:p')

ソース:vim wikiaで現在のファイルの名前を取得

関連する:


2
挿入モードのときにもこれらの=expand...式を使用することもできることに注意してくださいCtrl-R
ダッシュトムバン

22

を使用:!ls %:pして、現在のファイルへのフルパスを取得できます。

exコンテキストに応じて、%ファイルの内容またはファイル名のいずれかを意味します。シェルアウトするとき、それは現在のディレクトリに相対的なファイルパスを表します。コマンド ' %:p'は、フルパスファイル名修飾子をに追加し%ます。

他にもいくつかの興味深いファイル名修飾子があります:

  • :~:ホームディレクトリに相対的なファイルパスを取得します(これは何らかの理由で機能しませんでした)
  • :.:現在のディレクトリに相対的なファイルパスを取得します(%デフォルト)
  • :r:ファイル名のルート。拡張子なしのファイルの名前。
  • :e:ファイルの拡張子。
  • :h:分割し/て左半分を返します(つまり、パス内のファイルを編集して/tmp/test.txt実行%:p:hすると、/tmp
  • :t:分割し/て右半分を返します(つまり、パスのファイルを編集して/tmp/test.txt実行%:p:tすると、text.txt

あなたは%:p:tがtext.txtを返すことを意味していたと思います
John O'M。

@ JohnO'M。うん、そうですね。D。一定。
CharlesL

7

現在の作業ディレクトリはで確認できます:pwd。もちろん、これはディレクトリのみであり、ファイル名ではありません。作業ディレクトリとファイル名を取得するには%、現在のファイルに関する情報を含む特殊レジスターを使用できます。

を使用する場合:echo @%、現在のファイルのディレクトリとファイル名を取得します。
を使用する:echo expand('%:p')と、現在のファイルの完全なパスとファイル名が取得されます。これはCharlesLの答えに非常に似ています

あなたがVimのヘルプを使用している場合ので、私は、しかし、これを覚えて:h expand、それはそれに言及%し、%:pおよびその親族。



3

解決されたシンボリックリンクを含むすべてのファイルの完全なパスを表示するには、次を使用します。

:echo resolve(expand('%:p'))

3

より良い回答がありますが、(何らかの理由で)シェルを使用してファイルの完全なパスを取得したい場合(これは、シェルでファイルに対して他の操作を実行する場合に便利です)、 Unixライクシステムでは、次を実行できます。

:!realpath %

または:

:'<,'>!realpath %

現在の選択範囲を越えてドキュメントにパスを挿入します。

登録には%常にファイルの名前が含まれます。実際の例としては、設定ファイルを編集しているが、書き込み権限がない(そしてVimをrootとして実行したくない)場合、ファイルを編集してから実行できます:

:w ! sudo tee %

(そこofftopicほんの少し、それがで行うことができます他に何の良い例だファイルを保存する%レジスタ)。


realpathPOSIXではないため、より簡単に行うことができます!echo "$PWD/%"
。– muru

同意した; 良い電話。
サムホワイト

2

ステータス行を表示可能に設定し、パスに設定する必要があります。私は〜/ .vimrcに以下の2行を追加することで永続的にそうしました

set laststatus=2
set statusline+=%F

一度だけ実行したい場合。次に、ドキュメントタイプをVIする場合

:set laststatus=2       <ENTER>
:set statusline+=%F     <ENTER>

1
これは、同じ質問に対してthameeraが作成したものと同じ答えです。
statox


1

編集中のファイルの完全なパスをタイトルバーに表示できます。これは、私の意見ではファイルパスを表示するのに便利な方法です。

そのためには、titleオプションとを設定する必要がありますtitlestring。現在、次の設定を使用しています。

set title
set titlestring=%{hostname()}\ \ %F\ \ %{strftime('%Y-%m-%d\ %H:%M',getftime(expand('%')))}

Vimのホスト名、ファイルの完全パス、ファイルの最終変更時刻が表示されます。デモについては、以下の図を参照してください

ここに画像の説明を入力してください

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