208

現在のバッファが編集用に開いているファイルであると仮定すると、:eは表示されませんE32: No file name

次の1つまたはすべてをヤンクしたいと思います。

  • ステータス行に表示されているファイル名。例:~\myfile.txt
  • ファイルへのフルパス。例:c:\foo\bar\myfile.txt
  • ファイル名だけ、例えばmyfile.txt
4

10 に答える 10

240

TL; DR

:let @" = expand("%")>>

これにより、ファイル名が名前のないレジスタにコピーされ、古き良きものを使用pして貼り付けることができます。もちろん、これをキーにマップして、すばやく使用することもできます。

:nmap cp :let @" = expand("%")<cr>

フルパスにも使用できます

:let @" = expand("%:p")

説明

Vimは名前のないレジスターを使用して、削除またはコピー(ヤンク)されたテキストを保存します。同様に、貼り付けると、このレジスターからテキストが読み取られます。

を使用すると、を使用しletて手動でテキストをレジスタに格納できます:let @" = "text"が、式の結果を格納することもできます。

expand上記の例では、ワイルドカードとキーワードを展開する関数を使用しています。この例ではexpand('%')、現在のファイル名を展開するために使用します。expand('%:p')完全なファイル名は変更できます。

詳細はこちら:help let :help expand :help registersをご覧ください

于 2009-06-05T05:01:12.853 に答える
112

ほぼあなたが求めているものであり、それが行う可能性があります:Ctrl+R %現在のファイル名を現在の場所にプルします(コマンドプロンプト、編集バッファーなど)。詳細については、このVimのヒントを参照してください。

于 2009-05-27T17:05:55.550 に答える
89

現在のバッファファイル名をシステムレベルのクリップボードに入れたい場合は、レジスタを@+に変更してみてください。

" relative path
:let @+ = expand("%")

" full path
:let @+ = expand("%:p")

" just filename
:let @+ = expand("%:t")

20140421を編集:私はこれらをよく使用するので、いくつかのショートカットを作成しました。LinuxVimsはMacVimsとは明らかに動作が少し異なるため、そのための特別なケースもあります。あなたがあなたの中に以下を入れた場合~/.vimrc

" copy current file name (relative/absolute) to system clipboard
if has("mac") || has("gui_macvim") || has("gui_mac")
  " relative path  (src/foo.txt)
  nnoremap <leader>cf :let @*=expand("%")<CR>

  " absolute path  (/something/src/foo.txt)
  nnoremap <leader>cF :let @*=expand("%:p")<CR>

  " filename       (foo.txt)
  nnoremap <leader>ct :let @*=expand("%:t")<CR>

  " directory name (/something/src)
  nnoremap <leader>ch :let @*=expand("%:p:h")<CR>
endif

" copy current file name (relative/absolute) to system clipboard (Linux version)
if has("gui_gtk") || has("gui_gtk2") || has("gui_gnome") || has("unix")
  " relative path (src/foo.txt)
  nnoremap <leader>cf :let @+=expand("%")<CR>

  " absolute path (/something/src/foo.txt)
  nnoremap <leader>cF :let @+=expand("%:p")<CR>

  " filename (foo.txt)
  nnoremap <leader>ct :let @+=expand("%:t")<CR>

  " directory name (/something/src)
  nnoremap <leader>ch :let @+=expand("%:p:h")<CR>
endif

次に、たとえば<leader>cf、現在のバッファの相対パスをコピーします(デフォルトの引出線は円記号(\)です)。私はよくこれらをファイルでコマンドを実行したり、コマンドラインで他のことをしたりするために使用します。最後のファイル名/ディレクトリ名はあまり使用しません。

<leader>cfr相対、<leader>cfa絶対、<leader>cffファイル名、ディレクトリなど、より直感的なマッピングを検討することもできます<leader>cfd

于 2013-06-13T20:09:17.063 に答える
7

実行:regすると、レジスタに現在のファイルの名前が表示%されます。"%pたとえば、で貼り付けることができます。

私のように、「代替」バッファに頻繁に切り替える場合は、そのフルパスとファイル名を#レジスタに入れると非常に便利です。"#pたとえば、で貼り付けることができます。

注(これが私のセットアップに固有の動作である場合に備えて):Ubuntu14.04.4LTSでVIM7.4.52を使用しています。

于 2016-03-03T09:42:16.923 に答える
4

他のいくつかの回答からの情報を組み合わせる:ファイルへの現在のフルパスをヤンクして別のウィンドウのコマンドバッファーに入れたい場合は、最初に実行して:let @" = expand("%:p")から、別のウィンドウに移動してと入力しCtrl+R "ます。

同じディレクトリにとどまり、古いファイルを開いたままファイルをコピーする場合に便利です。例えば:

開始src / com / benatkin / paint / shapes/Circle.javaの編集

  1. タイプ:let @" = expand("%:p") (パスはメインクリップボードバッファーにヤンクされます。)

  2. で新しいウィンドウを開きます:sp

  3. タイプ:e Ctrl+R"

  4. 矢印キーを使用してCircleに戻り、Squareに変更して、<CR>を押します。

終了src / com / benatkin / paint / shapes/Square.javaの編集

于 2010-05-04T03:11:26.630 に答える
4

回答はNeovim/Ubunutuでテストされています。

:let @+=@%

私の知る限り、レジスタにはすでに相対ファイルパスが含まれているため、レジスタの内容をお気に入りのクリップボードを表すレジスタに%移動するのと同じくらい簡単です。%

このSOの回答は、あるレジスタから別のレジスタへのコピーを扱います。

私にはかなり簡単に思えます。覚えにくいものは必要ありませんexpand()

于 2020-10-06T11:54:32.463 に答える
1

これが私の解決策です:

" filename / dirname of the current file {{{
    " copy result to the system clipboard and echo the result
    " the cb> prompt means the clipboard
    " *f*ile *n*ame, ex. init.vim
    map <Leader>fn :let @+ = expand("%:t") \| echo 'cb> ' . @+<CR>
    " *f*ile *p*ath, ex. /home/user/nvim/init.vim
    map <Leader>fp :let @+ = expand("%:p") \| echo 'cb> ' . @+<CR>
    " *d*irectory *p*ath, ex. /home/user/nvim
    map <Leader>dp :let @+ = expand("%:p:h") \| echo 'cb> ' . @+<CR>
    " *d*irectory *n*ame, ex. nvim
    map <Leader>dn :let @+ = expand("%:p:h:t") \| echo 'cb> ' . @+<CR>
" }}}
于 2016-05-12T16:08:12.960 に答える
1

現在開いているファイル名のパスを単純にヤンクしたい場合は、次のように押します。

  1. step1:ctrl +g[ウィンドウの下部にルートパス全体が表示されます]
  2. ステップ2:マウスでパスを選択します
  3. step3:マウスの中輪で貼り付けます
于 2021-09-30T11:11:31.517 に答える
0

私はそれを私のvimcに入れました:

nnoremap yl :let @" = expand("%:p")<cr>
于 2022-03-01T15:20:17.867 に答える
-1

xclipを使用してXのクリップボードにアクセスするので、次を使用します。

nmap <localleader>d :call system("xclip -i -selection clipboard", expand("%:p"))<CR>
于 2013-10-02T20:44:42.160 に答える