Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim:在文件中搜索快捷键_Vim_Findinfiles - Fatal编程技术网

Vim:在文件中搜索快捷键

Vim:在文件中搜索快捷键,vim,findinfiles,Vim,Findinfiles,我使用vimgrep(或grep)来搜索vim中的文件,但我发现每次我想在vim中搜索时都要编写它是非常不方便的。你知道如何制作一个合适的快捷键来搜索文件吗 问候, Rafid如果在正常模式下按F3键,以下命令将带您进入命令行,预先填充vimgrep: :nmap <F3> :vimgrep<space> :nmap:vimgrep 如果始终希望搜索当前目录,请尝试: :nmap <F3> :vimgrep // *<left><left


我使用vimgrep(或grep)来搜索vim中的文件,但我发现每次我想在vim中搜索时都要编写它是非常不方便的。你知道如何制作一个合适的快捷键来搜索文件吗

问候,

Rafid如果在
正常模式下按F3键,以下命令将带您进入命令行,预先填充
vimgrep

:nmap <F3> :vimgrep<space>
:nmap:vimgrep
如果始终希望搜索当前目录,请尝试:

:nmap <F3> :vimgrep // *<left><left><left>
:nmap:vimgrep//*
如果要保存更多按键,请尝试以下操作在当前目录中搜索光标下的单词:

:nmap <F3> :vimgrep /<C-R><C-W>/ *<CR>
:nmap:vimgrep//*
当然,这些可以放在
.vimrc
文件中

Vim的内置帮助系统提供了许多关于这个主题的有用信息。请参阅以下部分来解释我所做的工作:

  • :帮助:nmap
  • :帮助c\u CTRL-R\u CTRL-W

    • 约翰西韦布解决方案的替代方案:

      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>
      
      set grepprg=ack
      nnoremap:grep
      nnoremap:noautocmd vimgrep//***$Bhhi
      nnoremap:noautocmd vimgrep//**/*
      xnoremap:let tmp=@ygv“yy:noautocmd vimgrep/\V=substitute(substitute(@y,'\','\\','g'),'/','\/','\/','g')/***:let@y=tmp:unlet tmp
      

      这将把F2映射到ack use Perl REGEPS,F3映射到vimgrep,而不触发autocmds(速度快得多),shift-F3映射到当前搜索模式的vimgrep,并且在视觉模式下将F3映射到当前高亮显示文本的vimgrep。

      不太优雅,但我使用这些命令行映射(因为我已经用其他命令使用了所有功能键):

      cmap vvv vimgrep//****
      cmap vvs vimgrep/***/.sas
      
      <代码>你确定第一个是正确的吗?vimGrp期望文件名,这基本上是我的问题。我知道如何进行映射,但是问题是如何把光标放在中间。例如,如果我想在所有文件中搜索hello,我会写:“VimGRP/HELL/*”。“。那么,如何在vim中创建一个编写上述命令的映射,而将我置于两个斜杠之间呢?是的,我确信它是正确的,它留下了一个不完整的命令行。但是,我无法预测您要搜索的目录。应该添加到我的答案中。谢谢,它现在起作用了。我应该在询问之前考虑:-)添加一个双星,使其成为一个好的选择<代码>确认
      也很整洁。谢谢。上面的$Bhhi是什么意思?@Rafid:在命令行上尝试它(前面加上CTRL+F)。这是一个编辑命令行的巧妙技巧。谢谢。真的很好。我想知道,从理论的角度来看,要知道vim的所有命令和组合键需要多长时间!可能有一些连Vim的创建者都不知道的技巧!实际上,这件事是由<代码> 'CEDIT '/COD>设置(<代码>:帮助> CEDIT '/CODE >)Hello @ RSDEDE,也许您可能希望看到<代码>:帮助'CEDIT '/CODE >避免所有的<代码> <代码> s(参见我的答案的第二个映射,不考虑语法高亮)。谢谢@班诺特尼斯替代方案
      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>