Как `cd `со словом в середине папки?

Используйте return.

Встроенная функция return bash закрывает исходный скрипт, не останавливая вызывающий (родительский/исходный )скрипт.

От ман баш:

return [n]
Causes a function to stop executing and return the value specified by n to its caller. If n is omitted, the return status is that of the last command executed in the function body. … If return is used outside a function, but during execution of a script by the. (source) command, it causes the shell to stop executing that script and return either n or the exit status of the last command executed within the script as the exit status of the script.

9
28.07.2020, 04:47
4 ответа

Я не могу говорить за других (, например, 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; затем нажатие Вкладка автоматически -завершается до:cd this.is.или любого другого следующего неоднозначного символа. Нажмите Tab еще раз, чтобы увидеть все параметры в этом отфильтрованном наборе.

Вы можете повторить, введя другой символ, чтобы сузить его, Вкладка для автозаполнения до следующего неоднозначного символа, а затем Вкладка , чтобы просмотреть все параметры.


Более того, bashможет обрабатывать подстановочные знаки в автозаполнении. В первом случае выше вы можете ввести cd D*s, а затем нажать вкладку , чтобы получить предложения о том, что может соответствовать шаблону :

.
~ $ 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
27
18.03.2021, 23:17

С помощью zshвы можете настроить систему завершения с помощью zstyles, чтобы она завершала слова в середине.

В этом вам может помочь функция 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, вы увидите, что она завершена до this.is.another.long.path.authorsпри условии, что нет файла, имя которого начинается с ano.

Я приглашаю вас пройтись по всем меню compinstall, так как там есть еще много удивительных функций, которые вы можете активировать. (то же самое дляzsh-newuser-install).

5
18.03.2021, 23:17

Используйте обратную косую черту. Это escape-символ, который указывает компьютеру воспринимать пробел буквально. Вот пример:

cd My\ Documents
-1
18.03.2021, 23:17

Просто скопируйте и вставьте нужную часть.

0
18.03.2021, 23:17

Теги

Похожие вопросы