Sed/Vim中的逻辑AND是什么?

Sed/Vim中的逻辑AND是什么?,vim,random,sed,Vim,Random,Sed,我想为下面的Vim命令获取AND-运算符 :command! -nargs=1 GrepSource :! grep <args> `sed -n 's/^source \(.*\)/\1/p' %` :命令-nargs=1 GrepSource:!grep`sed-n's/^source\(.*)/\1/p'%` 这样我就可以使用命令在 # source <path> # . <path> source <path> . <path&

我想为下面的Vim命令获取AND-运算符

:command! -nargs=1 GrepSource :! grep <args> `sed -n 's/^source \(.*\)/\1/p' %`
:命令-nargs=1 GrepSource:!grep`sed-n's/^source\(.*)/\1/p'%`
这样我就可以使用命令在

# source <path>
# . <path> 
source <path>
. <path>
#来源
# .  
来源
. 
我不确定是否有可能将AND-operator连接到SED或Vim


如何向SED命令添加AND运算符?

您可以使用Vim正则表达式来查找
名称,而不是使用
SED

:command! -nargs=1 GrepSource :exe printf("!grep '<args>' '%s'", matchstr(getline('.'), '^#\=\s*\%(source\|\.\)\s*\zs\f\+'))
:命令-nargs=1 GrepSource:exe printf(“!grep''%s',matchstr(getline('.'),'^\=\s*\%(source\\.\)\s*\zs\f\+”)
我认为那个司令部应该做你想做的事。您可以使用下一个命令测试正在发生的情况(“exe”更改为“echo”):

:命令-nargs=1 GrepSourceTest:echo printf(“!grep''%s',matchstr(getline('.'),'^\\=\s*\%(source\\.\)\s*\zs\f\+'))
该命令必须以以下形式之一在一行上使用:

# source <somefile>
# . <somefile>
source <somefile>
. <somefile>
#来源
# . 
来源
. 

我不清楚您想要实现/搜索什么。也许,如果你详细说明你到底想做什么,以及政府应该做什么,我们可以提供更多帮助

此解决方案通过vim命令执行:

grep PATTERN /some/path/*
如果要在目录中查找文件,请使用:

ls /some/path | grep PATTERN
您可以更新命令的相关部分

无论如何…

从您的脚本中,我假设您有一行指定了某个目录的路径,您希望对该目录执行grep操作,例如,您希望搜索模式的路径,将光标放置在带有路径的行上,然后您希望提取路径并使用命令对模式执行grep操作,例如文件中的行:

source /some/path
此命令应执行您期望的操作:

:command! -nargs=1 GrepSource :exe printf("!grep '<args>' '%s'/*", substitute(
getline('.'), "\\%(source\\s*\\)\\(.*\\)$", "\\1",""))
这将在“/some/path/”中的文件中搜索单词模式

我假设文件中的路径不以斜杠“/”结尾,并且我假设您要在文件中搜索,因此我在要搜索的路径末尾附加“/*”,以命令结尾:

grep PATTER /some/path/*
我使用了替换的
substitute
命令

source /some/path


然后在
printf
中使用它来创建实际的命令。

我无法使您的命令工作。请说明您的命令是否在您的机器中工作。--我使用Vim7.2,OSX10Leopard。我也在OSX10.5上使用7.2。使用第二个命令(GrepSourceTest)得到了什么输出?确保光标位于类似“源”或“.”的线上或“#”你的指挥棒极了我没有想到会有这样的命令我正在寻找一个命令,该命令会对所有源路径进行greps处理。为了达到这一目的,我们需要过滤通缉令并将其交给格雷普我不知道我们如何在一行中筛选/搜索这样的行。你的命令比我的目标要好。--我可以通过
:::!将当前目录中的所有文件进行grep!grep-r~/bin/wanteddir
。我的命令的缺点是,在分析具有长文件且文件源位于完全不同位置的项目时,它是不切实际的。@stefanB:我运行您的命令失败。--它的目的似乎与太多的php相同。不同之处在于使用了
substitute
和正则表达式。
grep PATTER /some/path/*
source /some/path
/some/path