Aqui está uma abordagem que é um pouco menos de digitação, mas você precisa ser um pouco cuidadoso com isso.
Envolve a referência do histórico !$
(que jcbermu também usou),
que significa a última palavra do comando mais recente.
(Isso está disponível na maioria dos shells: definitivamente bash
, csh
e tcsh
.)
Anexe o modificador :h
para remover um componente de nome de arquivo à direita,
deixando apenas o h ead, e seu comando é cd !$:h
.
Nos exemplos a seguir, o texto em negrito é o que você digita:
~ $ vim /usr/share/drupal7/sites/all/modules/legacy/legacy.module (edit the file) ~ $ cd !$:h cd /usr/share/drupal7/sites/all/modules/legacy /usr/share/drupal7/sites/all/modules/legacy $
Ele pode manipular espaços no nome do diretório, até um ponto:
~ $ vim /usr/share/drupal7/sites/all/modules/old\ code/legacy.module (edit the file) ~ $ cd !$:h cd /usr/share/drupal7/sites/all/modules/old\ code /usr/share/drupal7/sites/all/modules/old code $
ou
~ $ vim /usr/share/drupal7/sites/all/modules/"old code"/legacy.module (edit the file) ~ $ cd !$:h cd /usr/share/drupal7/sites/all/modules/"old code" /usr/share/drupal7/sites/all/modules/old code $
Mas, eu acho que uma boa declaração geral é que ele falhará se o último /
no nome do arquivo for citado:
~ $ vim "/usr/share/drupal7/sites/all/modules/old code/legacy.module" (edit the file) ~ $ cd !$:h cd "/usr/share/drupal7/sites/all/modules/old code > Ctrl+C (Shell asks for continuation text because it sees an unmatched quote character.)
Ele também falhará se o arquivo estiver no diretório atual:
~ $ vim legacy.module (edit the file) ~ $ cd !$:h cd legacy.module -bash: cd: legacy.module: No such file or directory ~ $ (:h has no effect because !$ doesn’t contain a /)
mas isso é trivial.
Se o arquivo estiver no diretório atual, você simplesmente não fará o cd
.
Outro problema seria se você colocasse o nome do arquivo em uma variável:
~ $ fn=/usr/share/drupal7/sites/all/modules/legacy/legacy.module ~ $ vim "$fn" (edit the file) ~ $ cd !$:h cd "$fn" -bash: cd: /usr/share/drupal7/sites/all/modules/legacy/legacy.module: Not a directory ~ $ (:h has no effect because !$ (which is "$fn") doesn’t contain a /)
Você pode lidar com isso da seguinte maneira:
~ $ fn=/usr/share/drupal7/sites/all/modules/legacy/legacy.module ~ $ vim (edit the file) ~ $ cd "${fn%/*}" /usr/share/drupal7/sites/all/modules/legacy $
Como as outras respostas sugeriram, use .
ou "$PWD"
para o comando git add
.