ดังที่ @muru กล่าวถึงไม่มีตัวเลือกในการกำหนดค่าไดเรกทอรีเพื่อให้ชื่อพา ธ และไฟล์สมบูรณ์ มันมักจะใช้ไดเรกทอรีการทำงานของหน้าต่าง
ฉันได้เขียนฟังก์ชั่นและการแมปสองสามรายการเพื่อช่วยในเรื่องนี้ เบื้องหลังพวกเขาเปลี่ยนไดเรกทอรีการทำงานในท้องถิ่น (โดยใช้:lcd
) ชั่วคราวจากนั้นเรียกคืนไดเรกทอรีการทำงานก่อนหน้านี้เมื่อเสร็จสิ้น
ช้าง
สำหรับเหตุผลที่ไม่รู้จักที่จะได้ฉันฉันได้นี้เรียกว่าไมโครปลั๊กอินช้าง
นี่คือรหัส (คัดลอกจากการกำหนดค่าVimของฉันบน GitHub ):
let g:elephant_map = {
\ 'f': function('elephant#current_file'),
\ 'p': function('elephant#vcs_project')
\ }
function! elephant#prompt(base)
let l:Fcn = get(g:elephant_map, a:base, function('elephant#identity'))
let l:basedir = l:Fcn()
execute 'lcd' l:basedir
let l:file = fnamemodify(input(l:basedir.'/', '', 'file'), ':p')
lcd -
return fnamemodify(l:file, ':.')
endfunction
function! s:elephant_init()
let l:base = getchar()
return elephant#prompt(nr2char(l:base))
endfunction
function! elephant#identity()
return '.'
endfunction
function! elephant#vcs_project()
return fnamemodify(finddir('.git', '.;'), ':h')
endfunction
function! elephant#current_file()
return expand('%:h')
endfunction
inoremap <silent> <expr> <C-R><C-E> <SID>elephant_init()
cnoremap <silent> <C-R><C-E> <C-R>=<SID>elephant_init()<CR>
วิธีใช้งาน
การใช้การแมปเหล่านี้เกิดขึ้นใน 3 ขั้นตอน
1. เรียกใช้การแมป
<C-R><C-E>
ในโหมดแทรกหรือโหมดบรรทัดคำสั่งเรียกการทำแผนที่โดยใช้
2. เลือกไดเรกทอรี
พิมพ์อักขระเดียวเพื่อเลือกไดเรกทอรีรากที่คุณต้องการทำให้เสร็จ รหัสด้านบนให้รากสองประเภท:
f
- ไดเรกทอรีที่ไฟล์ปัจจุบัน (บัฟเฟอร์) ตั้งอยู่
p
- ไดเรกทอรีฐานของโครงการ Git ที่ไฟล์ปัจจุบันเป็นของ
3. ป้อนพา ธ หรือชื่อไฟล์
คุณจะได้รับแจ้งให้ป้อนเส้นทางหรือชื่อไฟล์ที่สัมพันธ์กับไดเรกทอรีที่ระบุพร้อมความสมบูรณ์ กดEnter
เมื่อเสร็จสิ้น
บางบันทึก
- นี้ไม่ได้ให้แล้วเสร็จแบบอินไลน์ในโหมดแทรกวิธีการที่
<C-X><C-F>
ไม่; คุณจะพิมพ์พา ธ หรือชื่อไฟล์แทนในพรอมต์บรรทัด:
คำสั่ง (ไปที่คำสั่ง) เมื่อกดEnter
แล้วเส้นทางจะถูกแทรกลงในบัฟเฟอร์
- สิ่งเดียวกันนี้เป็นจริงในโหมดบรรทัดคำสั่งซึ่งบางครั้งอาจสร้างความสับสนเมื่อคุณกด
Enter
และลืมว่าคุณยังต้องกดEnter
เพื่อออกคำสั่งอะไรก็ตามที่คุณเพิ่งพิมพ์
- ฟังก์ชั่นไดเรกทอรีอื่น ๆ
g:elephant_map
สามารถลงทะเบียนโดยการเพิ่มพวกเขาลง
- เส้นทางที่แทรกจะเป็นเส้นทางแบบเต็มและแน่นอน สคริปต์สามารถปรับแต่งเพื่อเปลี่ยนพฤติกรรมนั้น แต่ฉันไม่ได้เข้าใกล้มัน
path
เช่นกัน) ขึ้นอยู่กับสิ่งที่คุณต้องการใช้สำหรับ vim-rooter เราสามารถใช้ปลั๊กอินอื่น ๆ ได้ทั้งนี้ขึ้นอยู่กับสิ่งที่คุณต้องการ นอกเหนือ: ผมใช้ youcompleteme./
ซึ่งเสร็จสมบูรณ์เส้นทางจากไดเรกทอรีของบัฟเฟอร์ปัจจุบันถ้าคุณเริ่มพิมพ์ ดูreddit.com/r/vim/comments/216jdd/ …