題 * nix上快速的Cd'ing方式?


我發現自己經常打字(當然使用標籤)荒謬的路徑

cd path/to/the/thing\ that\ I\ need/python/proj/eraseme

除了做一個 ln -s (或其他一些類型的ln?),有沒有其他方法可以更快地繞過?此外,如果要使用該解決方案 ln,是否有一些標準的方式/地方放置鏈接,以免雜亂我的 ~ 目錄?

我不是只要求快捷方式:任何有助於解決“如何繞行”問題的解決方案都會有所幫助。


4
2018-05-16 18:58


起源


也可以看看 superuser.com/questions/120399/... - mrucci
@mrucci很好,謝謝你。 - Dan Rosenstark


答案:


在bash中, $CDPATH 環境變量包含使用時要搜索目錄的路徑列表 cd

CDPATH=".:~/long path to my projects"
cd eraseme

11
2018-05-16 19:31



哇。這可能是我見過的最酷的事情。我不得不給它一個旋轉。謝謝! - Dan Rosenstark
我認為這可能比別名更容易引起混淆。 - Stephen
取決於你是否可以習慣它。我的意思是,既然這是你為自己做的事情,而不是你強加給別人的東西,那麼嘗試就沒有害處。 - David Z
@Stephen:我把它標記為最佳答案的原因是因為如果你將它與一個小腳本 - addcd結合起來,那就說 - 它可能非常強大,你可以完全避免混淆。或者你可以添加一個其他路徑放置你的 ln秒。事實上,這非常有用。 - Dan Rosenstark
@Ignacio Vazques-Abrams,我怎樣才能獲得自動完成功能(Tab鍵)以識別新添加的路徑?沒有它,這不會讓我走得很遠。 - Dan Rosenstark


有些人為此目的使用別名。試試這個例子:

alias cderaseme='cd /home/user/whatever/path/to/the/thing\ that\ I\ need/python/proj/eraseme'

現在,您可以在每次要轉到該目錄時鍵入cderaseme。別名僅對當前終端會話有效,因此請將其放在.bashrc中以保留它。


9
2018-05-16 19:10



很酷,好主意。 - Dan Rosenstark


一些簡單的想法:

  • 使用標籤完成。
  • 使用 cd 回到你的主目錄。使用 cd ~/<dir> 轉到相對於您的主目錄的目錄。
  • 使用 cd - 回到最後一個目錄。即使用此命令,您可以在兩個目錄之間來回切換。
  • 使用 pushd <dir> 轉到目錄並記住目錄堆棧上的先前位置。然後用 popd 返回(在目錄堆棧中)到以前的位置。
  • 使用相對路徑,即 cd ../<dir>而不是絕對路徑。
  • 使用 cd !$ 轉到上一個命令的最後一個參數中提到的目錄(取決於你的shell)。例: mkdir /tmp/dir 其次是 cd !$ 而你現在的目錄是 /tmp/dir

6
2018-05-16 19:14



您也可以在鍵入路徑時使用globbing。星號(*)特別有用 - 比如使用一個完整的選項卡而不必選擇替代選項(只要路徑上的某些內容使其明確無誤)。 - mpez0
@ mpez0在閱讀你的評論之前,我今天試過了。不知道它適用於多種路徑,它實際上非常酷。 - Dan Rosenstark


zsh 完成稍微好一點 - 您只需鍵入每個目錄的幾個字符,然後按 標籤 讓所有這些擴展:

$ cd p/t/t/t/p/p/er<tab>

還有一些實用程序可以記住你經常去哪裡嘗試猜測,或者只是表現得像一個更聰明的版本 cd,f.e。 cdargswcdapparixkcd......從來沒有使用它們,我總是習慣使用它們 zsh 完成。


4
2018-05-16 23:03



有趣。我將不得不研究為什麼我不使用zsh(或切換)。 - Dan Rosenstark
即使在bash上,我也可以做cd / d * / j * / g *,如果它是獨一無二的,它就會到達那裡。一開始還不錯。 - Dan Rosenstark


我通常會創建一個名為'mycd'的shell腳本,我可以將參數傳遞給它。 像這樣的東西:

# Shell script to CD into various locations.
if   [ "$1" == "myhome"  ]  ; then cd ~;
elif [ "$1" == "mypref"  ]  ; then cd ~/Library/Preferences;
elif [ "$1" == "mylib"  ]   ; then cd ~/Library;
elif [ "$1" == "syslib" ]   ; then cd /System/Library;
elif [ "$1" == "--help" ]   ; then
  echo "Usage: $0 location, which can be one of"
  echo "myhome = My home dir."
  echo "mypref = My Preferences dir."
  echo "mylib  = My Libraries dir."
  echo "syslib = System library."
  echo "--help = Show this message."
else echo "$0: $1 not known.";
fi

然後在別名文件中輸入如下條目:

alias mycd='. /path/to/mycd'

然後我可以用類似的東西來稱呼它 mycd mylib 它會直接帶我到那兒。

與上面提到的別名列表類似,但是這會將它們全部收集在一個地方,如果我需要提醒我存儲了哪些地方,它會提供幫助文本。


3
2018-05-16 23:36



+1我喜歡這個代碼,但最終結果有點笨拙。 - Dan Rosenstark


試試這個:
a(){別名$ 1 = cd \ $ PWD; }
這創建了一個小功能,可以輕鬆創建用於切換目錄的新別名。


1
2018-05-17 09:00



該死的是CUTE,謝謝你。 - Dan Rosenstark
但是,讓這些持續存在的最佳方法是什麼?我可以有 a 將命令添加到shell腳本的末尾,但我無法管理當前的shell環境。這個問題,如果你願意: stackoverflow.com/questions/496702 - Dan Rosenstark


今天一直在討論這些問題。有趣的是使用globbing和using的組合 tab 在Bash shell上。例如:

cd /p*/t*/*need*/py*

並點擊標籤,如果它是唯一的,它會擴展,否則它會給你選擇。


1
2018-05-17 09:21