現在のファイル名をVimのコンテンツに挿入するにはどうすればよいですか?


38

いくつかの検索の後:echo @%、vim-screenの最下行に現在のファイル名が表示されることを知りました。

ファイル名を(フルパスの有無にかかわらず)ファイルの内容にダンプせずに残しvimます。

これを行う方法はありますか?

回答:


27

これを行う方法は他にもあると思いますが、必要なメインコマンド:r[ead]は、コマンドの出力をバッファに挿入することです。

したがって、ファイル名のみを挿入するには:

:r! echo %

そして、フルパスを含めるには:

:r! echo %:p

詳細情報:

:help read
:help filename-modifiers 

37

現在のファイル名は"%レジスタ内にあるため、(挿入モードで)を使用して挿入できます<c-r>%。でフルパスを挿入できます<c-r>=expand("%:p")。頻繁に使用すれば、マクロを作成できます。その他の同様のトリックについては:h expand、およびを参照してください:h "=


誤解しているのかもしれません<c-r>が、REDOコマンドとしてマップされていませんか?
JCヤモコスキ

10
挿入モードで<c-r>は、次の文字がレジスターであることを指定します。
ケビン

了解、ありがとう。完全...挿入モードに切り替えるのを忘れて
JC Yamokoski

"%p通常モードまたはビジュアルモードでも実行できます。
-naught101

15

でわかるよう:h registersに、"%レジスタには現在のファイル名が含まれています。この:pu[t]コマンドは、レジスターの内容をテキストに挿入します。

したがって、実際のファイル名を挿入するには、コマンドモードで次のいずれかを入力します。

:put %

または

"%p

フルパスでファイル名を挿入するには、次を入力します

:put=expand('%:p')

コマンドモードで。


詳細:

:h pu[t]

入力"rpすると、registerの内容を貼り付けることができます"r


3
:put "%:p"私のために動作するようには思えません。in:のようにexpand()でのみ動作するようです。:put =expand('%:p')これにより、<c-r>=expand('%:p')残念なほど面倒ではなくなります。
akavel

@akavel正解です。答えを更新します。ありがとうございました!;)そして、実際、両方とも同等に冗長です。
ブラウンマグリン

5

簡単な方法は次を実行することです:

!!echo %
  • !! 現在の行を、それに続くコマンドの結果で置き換えています。

  • % コマンド内の編集済みファイルの名前に置き換えられるため、編集済みファイルにその名前が効果的に挿入されます。

ファイル名は、vi(m)コマンドに渡したものであり、相対パスまたは絶対パスが含まれる場合があります。削除してファイル名のみを保持する場合は、実行します

!!basename %

1

これを頻繁に行う必要がある場合は、http://vim.wikia.com/wiki/Insert_current_filenameに従って、キーシーケンスを必要なものにバインドすると便利です。

挿入モードのときに、カーソル位置に拡張子なしで現在のファイル名を挿入します。

:inoremap \fn <C-R>=expand("%:t:r")<CR>

拡張機能を使用し続けるには:

:inoremap \fn <C-R>=expand("%:t")<CR>

ファイルが使用されているディレクトリの絶対パスを挿入するには:

:inoremap \fn <C-R>=expand("%:p:h")<CR>

ファイルが使用されているディレクトリの相対パスを挿入するには:

:inoremap \fn <C-R>=expand("%:h")<CR>

上記はすべてvim、セッションで直接機能するか、セッションに配置できます.vimrc(行の先頭のコロンはオプションです)。


0

私は、現在のファイル名(パスまたは拡張子なし)を現在の位置(改行なし、現在行置換なし)に挿入する最も簡単な方法をグーグルで探していました。したがって、以前の回答とこのリンクを組み合わせて、これが私が探していたものです。

では、挿入モード:

<C-R>=expand("%:t:r")

それから次回(コマンドは既に履歴にあります):

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