我正在(慢慢地)切换到 Vim 进行日常 Ruby on Rails 编码(Linux Cinnamon 64 位)。作为一个新手,我最近遇到了一些我不明白的事情。
我想使用 :vimgrep 和 :grep 命令在 Vim 的文件树中搜索模式。我可以使用 :vimgrep 命令来做到这一点:
:vimgrep /User/gj **/*.rb
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将相同的命令与 :grep (应该使用系统 grep)一起使用时,没有返回任何结果:
:grep User **/*.rb
Run Code Online (Sandbox Code Playgroud)
谷歌搜索,我发现我的 bash shell的globstar选项没有启用:
$shopt globstar
globstar off
Run Code Online (Sandbox Code Playgroud)
很容易开启:
$shopt -s globstar
Run Code Online (Sandbox Code Playgroud)
我将上述行添加到我的 .vimrc 文件中,并确保该选项在我的 bash 中永久启用。
使用新选项,我可以通过这种方式执行 grep 并获得所需的结果:
$grep User **/*.rb
Run Code Online (Sandbox Code Playgroud)
不幸的是,来自 Vim 内部的 :grep 命令仍然不能使用 '**'。并执行:
!shopt globstar
Run Code Online (Sandbox Code Playgroud)
从 Vim 内部,结果仍然是off。
所以问题是:我可以将我的 bash 的globstar选项传播到我的 Vim 外部命令环境吗?否则,我能否以某种方式在 Vim 中设置我的grepprg选项,以允许我正确使用 globstar?
提前感谢任何愿意提供帮助的人
shell 选项不会继承分叉的 shell,但这就是 Vim 在您使用:!命令时所做的:它启动一个新的 shell。
您可以通过以下'shell'选项影响 Vim 中的那些分叉 shell :
:set shell+=\ -O\ globstar
Run Code Online (Sandbox Code Playgroud)
或者
:set shell=/bin/bash\ -O\ globstar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
587 次 |
| 最近记录: |