Như @muru đã đề cập, không có tùy chọn nào để định cấu hình thư mục để hoàn thành tên đường dẫn và tệp. Nó luôn sử dụng thư mục làm việc của cửa sổ.
Tôi đã viết một vài chức năng và ánh xạ để giúp với điều này. Đằng sau hậu trường, họ :lcd
tạm thời thay đổi thư mục làm việc cục bộ (sử dụng ), sau đó khôi phục thư mục làm việc trước đó khi hoàn tất.
Con voi
Vì những lý do mà ngay cả tôi cũng không biết, tôi đã gọi chú voi siêu nhỏ này .
Đây là mã (được sao chép từ cấu hình Vim của tôi trên 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>
Làm thế nào để sử dụng nó
Sử dụng các ánh xạ này xảy ra trong 3 bước.
1. Gọi ánh xạ
Trong chế độ Chèn hoặc chế độ Dòng lệnh, gọi ánh xạ bằng cách sử dụng <C-R><C-E>
.
2. Chọn một thư mục
Nhập một ký tự để chọn thư mục gốc mà bạn muốn hoàn thành. Đoạn mã trên cung cấp hai loại rễ:
f
- Thư mục mà tệp hiện tại (bộ đệm) nằm trong
p
- Thư mục cơ sở của dự án Git, tệp hiện tại thuộc về
3. Nhập đường dẫn hoặc tên tệp
Bạn sẽ được nhắc nhập đường dẫn hoặc tên tệp liên quan đến thư mục được chỉ định, với sự hoàn thành có sẵn. Nhấn Enter
khi hoàn thành.
Một số lưu ý
- Điều này không cung cấp hoàn thành nội tuyến trong chế độ Chèn theo cách
<C-X><C-F>
nào; thay vào đó, bạn sẽ gõ đường dẫn hoặc tên tệp trên dấu nhắc dòng lệnh (nơi :
các lệnh đi). Khi nhấn Enter
, đường dẫn sẽ được chèn vào bộ đệm.
- Điều tương tự cũng đúng trong chế độ Dòng lệnh, đôi khi có thể gây nhầm lẫn khi bạn nhấn
Enter
và quên rằng bạn vẫn phải nhấn Enter
để đưa ra bất kỳ lệnh nào bạn vừa gõ.
- Các chức năng thư mục khác có thể được đăng ký bằng cách thêm chúng vào
g:elephant_map
.
- Đường dẫn được chèn sẽ là đường dẫn đầy đủ, tuyệt đối. Kịch bản có thể được điều chỉnh để thay đổi hành vi đó, nhưng tôi không có nó.
path
). Nó phụ thuộc vào mục đích sử dụng của bạn cho vim-rooter là gì. Tùy thuộc vào những gì bạn muốn từ nó, chúng tôi có thể sử dụng các plugin khác. Ngoài ra: Tôi sử dụng youcompleteme, nó hoàn thành các đường dẫn từ thư mục của bộ đệm hiện tại nếu bạn bắt đầu nhập./
. Xem reddit.com/r/vim/comments/216jdd/ từ