在“浏览oldfiles”列表中使用搜索?

时间:2014-02-21 14:48:16

标签: vim

有没有办法在Vim中搜索最近使用的文件列表?该列表可以使用

显示
browse old

/不起作用。我知道一些插件(例如MRU)但更喜欢不使用插件。

5 个答案:

答案 0 :(得分:10)

这是一个简短的scriptlet,用于在暂存缓冲区中打开文件列表。作为奖励,它定义了到<Enter>当前文件的本地:edit映射。有了这个,您可以搜索所有内置命令,如/

:new +setl\ buftype=nofile | 0put =v:oldfiles | nnoremap <buffer> <CR> :e <C-r>=getline('.')<CR><CR>

答案 1 :(得分:3)

如果你真的想避免使用插件:

  1. :new旧文件将打印到此缓冲区
  2. :redir @X其中X是临时注册簿
  3. :silent echo(v:oldfiles)&#39;沉默&#39;是不是实际上没有在你的屏幕上打印
  4. :redir END
  5. "Xp粘贴临时注册
  6. (可选)使用一些正则表达式将每个文件放在自己的行上。
  7. 将上述内容放入函数中并瞧。另外:help redir

答案 2 :(得分:2)

编写一个简单(简单?)MRU命令实际上并不是很难完成,其作用类似于:edit:split

" this is our 'main' function: it couldn't be simpler
function! MRU(arg)
    execute 'edit ' . a:arg
endfunction

" the completion function, again it's very simple
function! MRUComplete(ArgLead, CmdLine, CursorPos)
    return filter(copy(v:oldfiles), 'v:val =~ a:ArgLead')
endfunction

" the actual command
" it accepts only one argument
" it's set to use the function above for completion
command! -nargs=1 -complete=customlist,MRUComplete MRU call MRU(<f-args>)

答案 3 :(得分:1)

这是上面代码的.vimrc版本。只需将以下行添加到.vimrc并映射到所需的键(在我的情况下,它是&#39; o)。另外定义模式以删除&#34;垃圾&#34;文件。为方便起见,光标也放在顶部。

最困难的是在嵌套的nmap中映射Enter。 ^ V是加倍Ctrl-V的结果。 ^ R是Ctrl-V + Ctrl-R的结果。 ^ M是Ctrl-V + Enter的结果。您需要手动重复这些符号 - 而不仅仅是复制/粘贴。花了好几个小时来理解这种魔力 - 所以我很高兴分享。此技术允许您在.vimrc中添加自己的宏。

"   Browse Old Files
nnoremap <silent> 'o :enew<CR>:set buftype=nofile<CR>:set nobuflisted<CR>:exe "0put =v:oldfiles"<CR>:nmap <buffer> ^V^V^M :e ^V^V^R=getline('.')^V^V^M^V^V^M<CR>:g/\v(stdout\|nerd\|fugitive)/d<CR>:0<CR>

答案 4 :(得分:1)

这是我对Ingo上面的.vimrc

的回答

在垂直分割或制表符中打开旧文件,然后将输入映射到光标下的打开文件!魔法!

" open old files list and map enter to open line " vertical split noremap <leader>vv :vnew +setl\ buftype=nofile <bar> 0put =v:oldfiles <bar> nnoremap <lt>buffer> <lt>CR> :e <lt>C-r>=getline('.')<lt>CR><lt>CR><CR><CR> " in new tab noremap <leader>vt :tabnew +setl\ buftype=nofile <bar> 0put =v:oldfiles <bar> nnoremap <lt>buffer> <lt>CR> :e <lt>C-r>=getline('.')<lt>CR><lt>CR <CR><CR>