Як згадував @muru, немає параметрів конфігурувати каталог, з якого можна завершити імена файлів. Він завжди використовує робочий каталог вікна.
Я написав пару функцій і відображень, щоб допомогти у цьому. Позаду вони тимчасово змінюють локальний робочий каталог (використовуючи :lcd
), після чого відновлюють попередній робочий каталог після закінчення.
Слон
З невідомих мені навіть причин я назвав цей мікроплагін Elephant .
Ось код (скопійований з мого конфігурації 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/…