Нечеткий набор рабочих каталогов из закладок каталогов в vim - PullRequest
1 голос
/ 16 февраля 2020

Иногда мне нужно изменить текущий рабочий каталог в другое место (например, для поиска в другом проекте). Это может быть достигнуто, например, с помощью lcd /path/to/dir. Однако написание путей часто бывает слишком медленным, и я часто использую одни и те же места. В идеале у меня должен был бы быть нечеткий искатель, такой как fzf , с предварительно заданным списком закладок в каталогах на выбор. Нечеткий поиск позволил бы быстро выбрать и изменить рабочий каталог (очевидно, без изменения текущего файла, из которого он был вызван).

В скором времени я ищу эквивалент fzf-marks инструмент для vim.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Сделав еще чтение , я нашел способ интегрировать fzf-mark в vim (который также прекрасно работает без fzf-mark).

Все вам нужен файл со списком каталогов с закладками, на который указывает переменная, например FZF_MARKS_FILE="${HOME}/.fzf-marks

Этот файл отформатирован следующим образом: cat $FZF_MARKS_FILE:

project1 : /home/user/project1/code
project2 : /home/user/project2/code
vimswapdir : /home/user/.local/share/nvim/swap
rlibsloc : /home/user/R/x86_64-pc-linux-gnu-library
trash : /home/user/.local/share/Trash/files
vim-plugins : /home/user/.config/nvim/plugged

Идея теперь такова загрузить и проанализировать его аналогично тому, как это сделано в fzf-marks функция перехода , и сделать его нечетким для быстрого поиска, определяя функцию FM:

command! -bang FM call fzf#run(fzf#wrap({'source': 'cat ~/.fzf-marks | sed "s/.*: \(.*\)$/\1/" | sed "s#~#${HOME}#"', 'sink': 'lcd'}, <bang>0))

вызов :FM теперь всплывает окно fzf с каталогами с закладками для выбора.

Вариант использования (который я часто нахожу сам):

Скажем, я где-то начал редактировать файл (скажем, в * 1023) *), но нужно было найти (:grep) предложение, содержащее слово foo, которое, как я знаю, находится в файле в /home/user/project1/code. Я никогда не могу вспомнить путь project1, просто он имеет code на своем пути. По этой причине я добавил его в закладки (см. Выше).

Раньше приходилось где-то искать путь и вводить его в vim, т.е. набирать :grep foo /home/user/project1/code. Теперь это работает быстрее следующим образом:

:FM в vim, вызывая список каталогов с закладками, печатая биты code, например, co, быстро ограничивает поиск:

enter image description here

выбор первой строки устанавливает текущий каталог на project1 (что можно подтвердить с помощью :pwd), но оставляет отредактированный файл без изменений. Теперь :grep! foo действительно выполняет рекурсивный поиск в проекте 1.

Закончив поиск, я могу сбросить рабочий каталог на текущий файл dir :cd %:h или root с rooter : :Rooter.

0 голосов
/ 17 февраля 2020

My ctrlp conf, особенно для cache_dir и let g:ctrlp_cmd = 'CtrlPMixed'

    " Open buffer here
    let g:ctrlp_switch_buffer = ''
    " Cache
    let g:ctrlp_cache_dir ='$h/.cache/ctrlp'
    " replace $home by ~ in cache
    let g:ctrlp_tilde_homedir = 1
    let g:ctrlp_mruf_max = 50000
    " Use ag <- grep
    " if executable('ag')
    "   let g:ctrl_user_command = 'ag %s -l --nocolor -g ""'
    " endif
    " Ignore
    let g:ctrlp_cutom_ignore = {
      \ 'dir': '\.git$,undo/',
      \ 'file': 'log'
    \ }
    if $os !=? 'termux'
      " E like edit and closer to ctrl + <c-p> used to paste
      let g:ctrlp_map = '<C-E>'
      vnoremap <C-E> :<C-u>CtrlPMixed<CR>
    else
      " Because move up gives c-e
      let g:ctrlp_map = ',e'
    endif
    " Keep cache
    let g:ctrlp_clear_cache_on_exit = 0
    " Mixed to search in MRU, FIles, Buffers
    let g:ctrlp_types = ['buf', 'mru', 'fil']
    let g:ctrlp_cmd = 'CtrlPMixed'
    " Faster listing <- vim.globpath
    if $os ==? 'windows'
      let g:ctrlp_user_command = 'dir %s /-n /b /s /a-d'
    else
      let g:ctrlp_user_command = 'find %s -type f'
    endif
...