В видео на Watch, как я работаю, он сначала получает вывод find . -type f и использует этот список как обычный файл vim для поиска. Он находит этот файл в списке и может открыть его в vim. Это выглядит действительно полезным, но он не указывает псевдоним для этого. Может кто-нибудь дать мне псевдоним для того же?

2 ответа2

2

То, что происходит, может быть объединено из точечных файлов автора. Предупреждение! Все это довольно запутанно (и умно).

  1. Это команда vim-:

    vim-() {
      vim -s <(printf '\eh')
    }
    

    Он открывает Vim и имитирует последовательность клавиш <Esc>h .

  2. <Esc>h отображается для выполнения пользовательской команды :FPScratchy которая, в свою очередь, вызывает внешний скрипт ack_find .

    nmap <ESC>h :FPScratchy "ack_find"<CR>
    
  3. Цель этой команды состоит в том, чтобы создать "временное окно", содержащее список файлов, сгенерированный внешней командой, и выполнить некоторые переназначения для навигации: <CR> в обычном режиме, чтобы открыть файл под курсором, <CR> в визуальном режиме, чтобы добавьте выбранные файлы в локальный арглист и нажмите <Esc><CR> в обычном режиме, чтобы открыть файл под курсором в разделенном окне.

    function! FPScratchy(...)
      call call(function("Scratchy"), a:000)
      setlocal cursorline
    
      nmap <buffer> <CR> 0gf
      vmap <buffer> <CR> :Lines2arglocal<CR>
      nmap <buffer> <ESC><CR> 0<c-w>f<c-w>w
    endfunction
    command -nargs=* FPScratchy :call FPScratchy(<args>)
    
    function! Lines2arglocal() range
      let lines = map(range(a:firstline, a:lastline), 'getline(v:val)')
    
      execute "arglocal " . join(lines, " ")
    endfunction
    command -range Lines2arglocal <line1>,<line2>:call Lines2arglocal()
    
  4. Автор изменил свой метод на основе find на несколько более ack метод, основанный на подтверждении , несколько лет назад . У нас нет средств узнать, что он использовал ежедневно, но мы можем предположить, что это было просто:

    $ find . -type f
    
2

Есть несколько способов сделать это. Чтобы получить вывод этой команды в буфер Vim, откройте Vim и выполните

:r!find . type f

Другим способом сделать это, используя vim в терминале, было бы выполнить следующее в приглашении оболочки.

$ find . type f | vim -

Я обычно помещаю курсор на желаемое имя файла и тип

<C-W>f

где <CW> означает Ctrl-W. Это откроет файл в новом окне, что устраняет проблему попытки открыть новый файл в измененном буфере.

Другой подход заключается в том, чтобы сначала выполнить

:set nomodified

Затем введите

gf

Это откроет новый файл в буфере / окне, содержащем список файлов.

Еще один способ - снова навести курсор на нужное имя файла и выполнить

:e! <C-R>f<CR>

где <CR> означает Ctrl-R, а <CR> означает клавишу Enter. Комбинация <CR> f развернется до имени файла под курсором.

Увидеть

:help :r!
:help CTRL-W_f
:help gf
:help 'modified'
:help c_CTRL-R_f

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .