Man*_*nur 1 vim command-line bash alias find
我已经有了(更多)快速搜索文件的别名:
alias f='find . -iname'
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
$ f *statis*
./main/statistics.py
./test/test_statistics.py
Run Code Online (Sandbox Code Playgroud)
现在,我想要另一个别名来执行相同的搜索,但不是打印出找到的文件,而是在 vim 中打开它们。理想情况下,它会在找到多个文件时工作。
我试过(使用 'echo' 而不是 'vim' 进行调试):
alias fvi='find . -exec echo {} + -iname'
Run Code Online (Sandbox Code Playgroud)
...但似乎-exec取消了-iname之后的到来:
$ fvi *statis*
./main/statistics.py ./main/probability.py ./test/test_statistics.py
./test/test_probability.py
Run Code Online (Sandbox Code Playgroud)
由于-exec {}参数必须在-iname(因为find从左到右“执行”它的参数)之后,所以你不能使用别名做你想做的事。而是让您的别名调用包含以下内容的脚本:
#!/bin/sh
find . -iname "$1" -exec vi {} \;
Run Code Online (Sandbox Code Playgroud)
请注意,这将为vi找到的每个文件调用一次。如果有很多这样的文件,你会做很多:q!'s 或ZZ's 来摆脱它们。如果要调用 的一个实例vi来编辑找到的所有文件,请将 更改\;为 a +:
find . -iname "$1" -exec vi {} +
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用命令替换将参数提供给vi:
vi $(find . -iname "$1") # do not use when file names may contain whitespace
Run Code Online (Sandbox Code Playgroud)
然而,这样做的缺点是它会在包含空格的文件名上失败。
如果您不想为命令创建脚本文件,请将语句放在 shell 函数中:
fvi () { find . -iname "$1" -exec vi {} + ; }
Run Code Online (Sandbox Code Playgroud)