打开目录中的文件列表,从中选择要在 vim 中编辑的文件

打开目录中的文件列表,从中选择要在 vim 中编辑的文件

在视频中观看我如何操作轨道他首先获取输出find . -type f并将此列表用作常规 vim 文件进行搜索。一旦他在列表中找到此文件,他就可以在 vim 中打开它。这看起来非常有用,但他没有指定别名来执行此操作。有人可以给我同样的别名吗?

答案1

发生的事情可以从作者的点文件。警告!整个事情相当复杂(而且很聪明)。

  1. 这是vim-bash 命令:

    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为基础的A几年前。我们无法知道他每天使用什么,但我们可以假设是简单的:

    $ find . -type f
    

答案2

有几种方法可以做到这一点。要将该命令的输出放入 Vim 缓冲区,请打开 Vim 并执行

:r!find . type f

另一种方法是使用终端中的 vim,在 shell 提示符下执行以下操作。

$ 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

相关内容