Вот подход, который немного меньше набирает, но вы должны быть немного осторожнее с ним.
Это включает в себя !$
history reference (которую также использовал jcbermu), что означает последнее слово самой последней команды.
(Это доступно в большинстве оболочек: определенно bash
, csh
и tcsh
.)
Добавьте :h
, чтобы удалить компонент имени трейлинга файла, оставляя только ч EAD, и ваша команда cd !$:h
В следующих примерах жирный текст - это то, что вы вводите:
~ $ 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 $
Он может обрабатывать пробелы в имени каталога, вплоть до точки:
~ $ 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 $
или же
~ $ 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 $
Но, я думаю, что хорошее общее утверждение состоит в том, что он терпит неудачу, если последний /
в имени файла указан в кавычках:
~ $ 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.)
Он также не работает, если файл находится в текущем каталоге:
~ $ 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 /)
но это тривиально
Если файл находится в текущем каталоге, вы просто не будете делать cd
вообще.
Другая проблема будет, если вы поместите имя файла в переменную:
~ $ 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 /)
Вы можете справиться с этим следующим образом:
~ $ fn=/usr/share/drupal7/sites/all/modules/legacy/legacy.module
~ $ vim
(edit the file)
~ $ cd "${fn%/*}"
/usr/share/drupal7/sites/all/modules/legacy $
Как предложили другие ответы, используйте .
или "$PWD"
для команды git add
.