最近越來越常需要自己打字輸入正在編輯中的檔案路徑,但是打字很累,於是又到了調校 vim 的時間。
基本上就是找到拿到檔案路徑的辦法,然後設定成快捷鍵,就可以開心工作了。
複製檔案相對路徑#
vim 要拿到檔案路徑,有 expand('%') 這個方法可以辦到。而作業系統的剪貼簿相通變數 @+ ,只要賦值給 @+ 就是等同於複製了。
使用 vimscript 便可以將路徑複製到剪貼簿:
設定成快捷鍵:
1
| nnoremap <leader>yf :let @+=expand('%')<CR>
|
無法複製相對路徑#
設定完快捷鍵後,我以為就此完工了,但是現在這組快捷鍵有時會有問題,複製的路徑不是「相對路徑」而是「絕對路徑」。
因為 netrw 預設是用「絕對路徑」開啟檔案的,所以複製會變成「絕對路徑」。
所以這邊要修正 expand('%') 的寫法,使用 '%:.' 拿到相對路徑。
現在的快捷鍵設定:
1
| nnoremap <leader>yf :let @+=expand('%:.')<CR>
|
加入配合 AI Agent 的常用複製方法#
再根據近期使用 AI Agent 的情境來增加複製快捷鍵:
- 複製目前的檔案路徑跟所在行數
- 複製目前的檔案路徑跟選取的行數範圍
要取得行數資訊,可以使用 line() 這個函式,組合成 <file path>:<line number> 的格式
複製檔案路徑跟所在行數快捷鍵:
1
| nnoremap <Leader>yl :let @+=expand('%:.') . ':' . line('.')<CR>
|
複製檔案路徑跟選取範圍快捷鍵:
1
| vnoremap <Leader>yf :<C-u>let @+=expand('%:.') . ':' . line("'<") . '-' . line("'>")<CR>
|
最終版本#
最後,加上一點文字提示,方便知道操作成功。以下是這次的完整版設定:
1
2
3
4
5
6
7
| " use '%:.' to get relative path from current working directory
" copy relative file path to clipboard
nnoremap <Leader>yf :let @+=expand('%:.')<CR>:echo 'Copied: ' . expand('%:.')<CR>
" copy file path:line to clipboard
nnoremap <Leader>yl :let @+=expand('%:.') . ':' . line('.')<CR>:echo 'Copied: ' . expand('%:.') . ':' . line('.')<CR>
" copy file path:startline-endline to clipboard
vnoremap <Leader>yf :<C-u>let @+=expand('%:.') . ':' . line("'<") . '-' . line("'>")<CR>:echo 'Copied range'<CR>
|