我的工作区包含许多文件夹,所有文件夹都由长路径组成。例如:
|- workspace
|-- this.is.very.long.name.context
|-- this.is.another.long.path.authors
|-- // 20 more folders
|-- this.is.folder.with.too.many.characters.folder
它们都以相同的阶段 ( this.is
) 开始,在我的实际情况中,该阶段有 20 个字符长,并且它们在最后一个序列中大多不同。有什么方法可以使用cd
命令快速浏览它们吗?有像这样的狂野角色吗?
?
答案1
我不能代表其他人(例如,zsh
),但如果您使用bash
,通配符确实在一定程度上起作用。例子:
~ $ ls
Documents
Desktop
Downloads
如果您使用星号 ( *
),您将得到:
~ $ cd *ments
~/Documents $
这是因为bash
可以在命令到达之前进行替换cd
。
在 的情况下cd
,如果多个匹配有效,您会期望该行为是未定义的:
~ $ cd *s
bash: cd: too many arguments
bash
将其扩展为cd Documents Downloads
,这对于 来说没有意义cd
。
您还可以依赖 的bash
自动完成功能。在您的示例中,您只需输入cd t
;然后点击Tab将自动完成为:cd this.is.
或任何下一个不明确的字符。Tab第二次点击可查看此过滤集中的所有选项。
您可以重复输入另一个字符来缩小范围, Tab自动完成到下一个不明确的字符,然后Tab查看所有选项。
更进一步,bash
可以在自动完成中处理通配符。在上面的第一种情况下,您可以输入cd D*s
然后点击Tab以获取与模式匹配的建议:
~ $ cd D*s
Documents/ Downloads/
~ $ cd D*s
如果仅存在一场比赛,它将为您完成。
~ $ cd *loads
~ $ cd Downloads/
ls
如果您不介意位于有问题的目录中,也可以使用。指示-d
列出ls
目录本身而不是其内容。
$ ls -d *long*
this.is.very.long.name.context
this.is.another.long.path.authors
find
或者如果你想递归地查看,你可以使用:
$ find workspace -type d -name '*long*'
workspace/this.is.very.long.name.context
workspace/this.is.another.long.path.authors
答案2
使用zsh
,您可以使用 s 配置完成系统,zstyle
以便它完成中间的单词。
该compinstall
功能可以帮助您做到这一点。例如运行它autoload compinstall; compinstall
。也可以通过zsh-newuser-install
首次使用时经常调用的菜单zsh
(当您还没有菜单时.zshrc
)使用它。
*** compinstall: main menu ***
2. Matching control: set behaviour for case-insensitive matching,
extended (partial-word) matching and substring matching.
*** compinstall: matcher menu ***
`Matchers' compare the completion code with the possible matches in some
special way. Numbers in parentheses show matchers to be tried and the order.
The same number can be assigned to different matchers, meaning apply at the
same time. Omit a sequence number to try normal matching at that point.
A `+' in the first line indicates the element is added to preceding matchers
instead of replacing them; toggle this with `t'. You don't need to set
all four, or indeed any matchers --- then the style will not be set.
( ) `+' indicates add to previous matchers, else replace
n. ( ) No matchers; you may want to try this as the first choice.
c. ( ) Case-insensitive completion (lowercase matches uppercase)
C. ( ) Case-insensitive completion (lower/uppercase match each other)
p. ( ) Partial-word completion: expand 'f.b' to 'foo.bar', etc., in one go.
You can choose the separators (here `.') used each time.
s. ( ) Substring completion: complete on substrings, not just initial
strings. Warning: it is recommended this not be used for element 1.
如果你做到了:
( ) `+' indicates add to previous matchers, else replace
n. (1 ) No matchers; you may want to try this as the first choice.
c. ( ) Case-insensitive completion (lowercase matches uppercase)
C. ( ) Case-insensitive completion (lower/uppercase match each other)
p. ( ) Partial-word completion: expand 'f.b' to 'foo.bar', etc., in one go.
You can choose the separators (here `.') used each time.
s. ( 2 ) Substring completion: complete on substrings, not just initial
strings. Warning: it is recommended this not be used for element 1.
保存并退出,您会看到compinstall
将此行添加到您的~/.zshrc
:
zstyle ':completion:*' matcher-list '' '' '' 'l:|=* r:|=*'
info zsh matcher-list
(注意:您可能需要安装一个zsh-doc
软件包)会告诉您它是如何工作的。
然后,如果您输入cd ano
Tab,您将看到它已完成,this.is.another.long.path.authors
假设没有名称以 开头的文件ano
。
我邀请您浏览所有compinstall
菜单,因为您可以启用更多令人惊奇的功能。 (同样zsh-newuser-install
)。
答案3
只需复制并粘贴您需要的部分即可。
答案4
使用反斜杠。这是一个转义字符,它告诉计算机按字面意思处理空格。这是一个例子:
cd My\ Documents