2010-11-22 83 views
1

我用這個小功能在我的.bashrc迅速看到我使用任何自定義工具來源:如何使用bashrc函數更改爲文件目標目錄?

function wvi() 
{ 
    vi `which $1`; 
} 

例如,fvi mysort將打開我的工具mysort的來源。

還有一件事我可以在這裏使用 - 自動切換到實用程序存在於目錄。

例如,

~ $ which mysort 
/usr/bin/mysort 
~ $ 

然後fvi mysort應該做一個cd /usr/bin,然後打開使用vi

如何將這個邏輯放在我的.basrhc?是否有一些直接的實用工具,或者我需要首先得到路徑,然後砍掉最後一個節點?

回答

2
dirname `which mysort` 
+0

什麼是正確的方式來寫`cd \`dirname \`哪個mysort \``?我認爲不允許嵌套。 – Lazer 2010-11-22 16:13:25

+0

@Lazer cd $(dirname` \`which mysort \``) - 可能是一個解決方案 – shuvalov 2010-11-22 16:15:50

+3

J '$()`用於`cd $(dirname $(which mysort))` – 2010-11-22 17:10:17

0
wvi() { 
    local file="$(which "$1")" 
    cd $(dirname "$file") 
    vi $(basename "$file") 
    cd - # return to the previous dir 
} 

當你定義函數()

你可以寫你的函數在子shell中運行,所以你不必事後收拾你不需要function關鍵字:

wvi() (
    file="$(which "$1")" 
    cd $(dirname "$file") 
    vi $(basename "$file") 
) 
0
cd $(dirname `which $1`) 

將工作在大多數情況下,雖然你可能要考慮如果用if語句(-h選項來測試內置查找符號鏈接)

if [ -h `which $1 ]; then 
    ... 

你可能想這樣做的原因封閉像

cd $(dirname $(readlink `which $1`)) 

符號鏈接是VIM的行爲有時會在打開符號鏈接時發生變化,具體取決於您打算如何處理打開的文件。

1

無需外部工具:

fvi() { 
    cd "${1%/*}" 
    vi "${1##*/}" 
} 
1

我會做這種方式

wvi() {(
    p=$(which "$1") 
    cd "${p%/*}" 
    ${EDITOR:-vi} "${p##/*/}" 
)} 

$ EDITOR而不是公正的情況下,用戶可能更願意使用Emacs拋出字面六( - :