有没有办法在Vim中搜索最近使用的文件列表?该列表可以使用
显示browse old
但/
不起作用。我知道一些插件(例如MRU)但更喜欢不使用插件。
答案 0 :(得分:10)
这是一个简短的scriptlet,用于在暂存缓冲区中打开文件列表。作为奖励,它定义了到<Enter>
当前文件的本地:edit
映射。有了这个,您可以搜索所有内置命令,如/
:
:new +setl\ buftype=nofile | 0put =v:oldfiles | nnoremap <buffer> <CR> :e <C-r>=getline('.')<CR><CR>
答案 1 :(得分:3)
如果你真的想避免使用插件:
:new
旧文件将打印到此缓冲区:redir @X
其中X是临时注册簿:silent echo(v:oldfiles)
&#39;沉默&#39;是不是实际上没有在你的屏幕上打印:redir END
"Xp
粘贴临时注册将上述内容放入函数中并瞧。另外: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>