【发布时间】:2011-05-09 18:09:54
【问题描述】:
我使用 vimgrep(或 grep)在 vim 中搜索文件,但我发现每次我想在 vim 中搜索时都必须编写它非常不方便。关于如何制作合适的快捷键来搜索文件的任何想法?
问候,
拉菲德
【问题讨论】:
标签: vim findinfiles
我使用 vimgrep(或 grep)在 vim 中搜索文件,但我发现每次我想在 vim 中搜索时都必须编写它非常不方便。关于如何制作合适的快捷键来搜索文件的任何想法?
问候,
拉菲德
【问题讨论】:
标签: vim findinfiles
不是很优雅,但我使用这些命令行映射(因为我已经用其他命令消耗了所有功能键):
cmap vvv vimgrep // **/*.*<Left><Left><Left><Left><Left><Left><Left><Left>
cmap vvs vimgrep // **/*.sas<Left><Left><Left><Left><Left><Left><Left><Left><Left><Left>
【讨论】:
:help 'cedit' 以避免所有那些<left>s(请参阅我的回答中的第二个映射并且不考虑语法突出显示)。
Johnsyweb 解决方案的替代方案:
set grepprg=ack
nnoremap <F2> :grep<space>
nnoremap <F3> :noautocmd vimgrep // **/*<c-f>$Bhhi
nnoremap <S-F3> :noautocmd vimgrep /<C-R>// **/*<return>
xnoremap <F3> :<c-u>let tmp=@y<cr>gv"yy:noautocmd vimgrep /\V<c-r>=substitute(substitute(@y,'\','\\','g'),'/','\/','g')<cr>/ **/*<return>:let @y=tmp<cr>:unlet tmp<cr>
这会将 F2 映射到 ack 使用 Perl 正则表达式),F3 映射到 vimgrep 而没有触发自动命令(快得多),shift-f3 到当前搜索模式的 vimgrep,并且在可视模式下 F3 到当前搜索模式的 vimgrep突出显示的文本。
【讨论】:
ack也很整洁。
'cedit'设置控制的(:help 'cedit')如果您在normal mode 中按F3,以下内容将带您进入命令行,该命令行预先填充有vimgrep:
:nmap <F3> :vimgrep<space>
如果你总是想搜索当前目录,试试:
:nmap <F3> :vimgrep // *<left><left><left>
如果你想保存更多的按键,试试这个在当前目录中搜索光标下的单词:
:nmap <F3> :vimgrep /<C-R><C-W>/ *<CR>
当然,这些可以放入你的.vimrc文件中。
Vim 的内置帮助系统提供了很多关于这个主题的有用信息。请参阅以下部分来解释我所做的事情:
:help :nmap:help c_CTRL-R_CTRL-W【讨论】:
:nmap <F3> :vimgrep /<C-R><C-W>/ **<CR>