Bash kabuğunda hızlı rehber gezinme


119

Sık sık, örneğin tamamen alakasız yolları vardır dizinleri arasında geçiş yapmak istiyorum /Project/Warnest/docs/ve ~/Dropbox/Projects/ds/test/.

Ama ben her zaman yazmak istemiyorum cd /[full-path]/. Daha önce çalışılmış dizinlere geçmek için kısayol komutları var mı?

Düşünebileceğim bir çözüm bash .profile, sık kullanılan dizinler cdiçin ortamıma değişkenleri ve bu değişkenleri kullanarak onlara eklemektir .

Ancak bunun için başka bir çözüm var mı?


Bunun için sembolik bağlantılar da faydalı olabilir. en.wikipedia.org/wiki/…
user606723

Yanıtlar:


135

Yalnızca iki dizin arasında geçiş yapıyorsanız, cd -ileri geri gitmek için kullanabilirsiniz .


13
Bunun beni bu kadar uzun süre nasıl atlattığı bir sır. Bu mükemmel ipucu için çok teşekkür ederim.
Bay Shickadance,

3
+1 Kesinlikle benim favorilerimden biri ve bir şekilde birçok uzmanın 'kaçırdığı' biri.
Michael Durrant

62

Bir kabuk değişkeni vardır CDPATHiçinde bashve kshve cdpathiçinde zsh:

CDPATH    The search path for the cd command. This is a colon-separated
          list of directories in which the shell looks for destination
          directories specified by the cd command.

Böylece ~ / .bashrc'nizi ayarlayabilirsiniz:

export CDPATH=/Project/Warnest:~/Dropbox/Projects/ds

Sonra cd docsve cd testilk bulunan bu tür dizine götürecektir. (Geçerli dizinde aynı ada sahip bir dizin bulunsa bile CDPATH, yine de danışılmalıdır. CDPATHBelirtilen ada sahip alt dizinleri olan daha fazla dizin içerecekse, ilk kullanılacaktır.)


16
Genel olarak, ilk girişin olmasını istediğinizden (açıkça bir giriş, yani aynı zamanda çalışacağını) belirtmeniz $CDPATHgerekir . Aksi halde , mevcut çalışma dizinindeki, muhtemelen istemediğiniz dizinler üzerinde dizinlerin öncelikli olduğu garip davranışlarla karşılaşırsınız . .:CDPATH
jw013

4
Ben de hemen hemen aynı şeyi yapıyorum, ancak olmadan export. Bu şekilde, CDPATHpotansiyel olarak tuhaf veya zararlı etkileri olan komut dosyalarına aktarılmaz. Daha fazla tartışma ve örnekler için buraya bakınız .
Telemachus

"bash, ksh ve zsh'daki cdpath" ... ve tcsh'da (sadece Süper Kullanıcıya dayanarak bir soruya cevap verip SE'de benzer cevaplar ararken bunu buldum).
Hennes

Bu POSIX tarafından belirlenmiş, sanırım. En azından, POSIX cdbuna atıfta bulunur.
mikeserv,

48

Deneyebileceğiniz başka bir şey autojump adlı bir araçtır . Takma adını ( jvarsayılan olarak) yapılan bir arama veritabanını tutar ve nereye gitmek istediğinize ilişkin akıllıca kararlar vermeye çalışır. Örneğin, sık sık yazarsanız:

j ~/Pictures

Bir çimdik almak için aşağıdakileri kullanabilirsiniz:

j Pic

Debian ve Ubuntu'da mevcuttur ve kullanıcı başına ~/.bashrcveya ~/.zshrcvarsayılan olarak kullanıcı başına dahil edilir.


5
Autojump muhtemelen bunun için en iyi araçtır, ortak dizinlerin veritabanını oluşturmak biraz zaman alır, ancak bir kez onsuz yaşayamayacağınızı keşfedeceğinizi düşünüyorum. Ne zaman başkasının bilgisayarında olduğumu biliyorum, kendimi sakat hissediyorum.
quodlibetor

1
teşekkürler bu aracı seviyorum! Ve cd -zaten bilmiyorsanız bilmek faydalı olsa da, bunun şu anki en iyi cevaptan daha iyi bir çözüm olduğunu düşünüyorum.
Kullanıcı

Hangi sistemlere sistem genelinde yüklü?
ctrl-alt-delor

1
@richard apt-get install autojumpSistem çapında kurulum için bir paket olarak mevcuttur (örn . Ubuntu'da, fakat aynı zamanda sayfalarında belgelenen pek çok kişi için), ancak sistem genelinde kurulum için her kullanıcının bunu kabuk ortamına yüklemesi gerekir; nereye gidiyorsun
nealmcb

Söylemeye gerek Önemli source /usr/share/autojump/autojump.sh~ / .bashrc eklenmelidir autojump çalışması için .
Pablo A,

39

Az sayıda dizin ise, pushdaralarında döndürmek için kullanabilirsiniz :

# starting point
$ pwd
/Project/Warnest/docs
# add second dir and change to it
$ pushd ~/Dropbox/Projects/ds/test
~/Dropbox/Projects/ds/test /Project/Warnest/docs
# prove we're in the right place
$ pwd
~/Dropbox/Projects/ds/test
# swap directories
$ pushd
/Project/Warnest/docs ~/Dropbox/Projects/ds/test

aksine cd -, bunu ikiden fazla dizinde kullanabilirsiniz


Noach'un önerisini takiben şimdi bunu kullanıyorum:

function pd()
{
    if [[ $# -ge 1 ]];
    then
        choice="$1"
    else
        dirs -v
        echo -n "? "
        read choice
    fi
    if [[ -n $choice ]];
    then
        declare -i cnum="$choice"
        if [[ $cnum != $choice ]];
        then #choice is not numeric
            choice=$(dirs -v | grep $choice | tail -1 | awk '{print $1}')
            cnum="$choice"
            if [[ -z $choice || $cnum != $choice ]];
            then
                echo "$choice not found"
                return
            fi
        fi
        choice="+$choice"
    fi
    pushd $choice
}

örnek kullanım:

# same as pushd +1
$ pd 1

# show a prompt, choose by number
$ pd
 0 ~/Dropbox/Projects/ds/test
 1 /Project/Warnest/docs
 2 /tmp
? 2
/tmp ~/Dropbox/Projects/ds/test /Project/Warnest/docs

# or choose by substring match
$ pd
 0 /tmp
 1 ~/Dropbox/Projects/ds/test
 2 /Project/Warnest/docs
? doc
/Project/Warnest/docs /tmp ~/Dropbox/Projects/ds/test

# substring without prompt
$ pd test
~/Dropbox/Projects/ds/test /Project/Warnest/docs /tmp

Açıkçası bu sadece yığının içinden dönmek içindir ve yeni yollar eklemekle ilgilenmez - belki de yeniden adlandırmalıyım.


6
Ooh, biliyordum pushdve popdgeçiş için biliyordum , ama bu
itici

14

Bu aliascd'leri yapmak için bashrc kullanıyorum .
gibi:

alias wdoc='cd ~/Project/Warnest/docs'
alias dstest='cd ~/Dropbox/Projects/ds/test'

bashrc .profile benzeri bir dosya mı? hangi satırları eklemem gerekiyor?
saiy2k

~/.bashrcveya /etc/bash.bashrc. Daha .profileönce kullanmadım , bu yüzden aralarındaki ilişkiyi bilmiyorum :-(
Felix Yan

scriptler bashrc terminali her açtığınızda başlayacaktır. başlangıç ​​ile profil.

benim için bu satırları ekledi .bash_profileve harika çalışıyor .. thx :)
saiy2k

Düzenli olarak uyguladığım birkaç özel proje klasörüm var, bu onları ayarlamanın ve sürdürmenin en kolay yoludur. Ayrıca, benim için, buradaki tüm çözümlerden yazılan en az sayıda karakterle sonuçlanır. ÖPMEK! :-)
moodboom

11

Bu sorunu benim için çözen bir komut dosyası (genellikle acd_funch.sh olarak adlandırılır) buldum. Bununla cd --, kullandığınız son 10 dizini görmek için yazabilirsiniz . Bunun gibi bir şeye benzeyecek:

0  ~/Documents/onedir
1  ~/Music/anotherdir
2  ~/Music/thirddir
3  ~/etc/etc

~/Music/thirddirSadece tipe gitmek içincd -2

Referanslar

NOT: Bu script ilk olarak burada bulunan bir linux gazete makalesinde yayınlanmıştır: acd_func.sh - ziyaret edilen dizin adlarının geçmişini saklamak, görüntülemek ve erişmek için bash CD'sini genişletir .



@Dean Bağlantı bir müzik videosuna gidiyor ve Geocities'in kapandığını söylüyor.
bir

1
@somethingSomething Alternatif bağlantılar eklendi.
Dean

tarihçe | grep cd
user2180794

10

cdable_varsBash'de shell seçeneğini deneyin . İle açın shopt -s cdable_vars.

O zaman değişkenlerinizi ayarlamanız gerekir export dir1=/some/path. ve son olarak cd dir1, vb ~/.bashrc. Yapışmasını sağlamak için içine koyabilirsiniz .


10

"Pushd -n " kullanın (bash kullandığınız varsayılarak).

~ / .Bashrc dosyasına ekleyin:

pushd -n /Project/Warnest/docs/
pushd -n ~/Dropbox/Projects/ds/test/

sonra,

cd ~ senin evin

cd ~1 dır-dir ~/Dropbox/Projects/ds/test/

cd ~2 dır-dir /Project/Warnest/docs/

Aynı şekilde ~1, ~2vb kullanabilirsiniz ~.


7

Burada birçok iyi öneri var. Hangisini kullanacağınız, aralarında geçiş yaptığınız küçük bir dizin listesi olup olmadığına veya daha genel bir çözüm mü aradığınıza bağlı olacaktır.

Küçük bir sabit liste ise, basit takma adların (Felix Yan'ın önerdiği gibi) ayarlanması kullanımı en kolay olacaktır.

Daha genel bir çözüm arıyorsanız (yani zaman içinde değişen birçok farklı dizin,), pushd ve popd (Yararsız'ın önerdiği gibi) kullanırdım. Kişisel olarak varsayılan pushd / popd'ı kullanmak zor, özellikle de birçok klasör arasında geçiş yapmaya başladığınızda; ancak benim için daha kolay hale getiren bir kaç tane tweaks yazdım. Bashrc'ınıza aşağıdakileri ekleyin:

alias dirs='dirs -v'
pd () 
{ 
    if [ "$1" ]; then
        pushd "${1/#[0-9]*/+$1}";
    else
        pushd;
    fi > /dev/null
}
  • Kullanın pd(daha kısa bir form olarak pushdnerede olduğunu hatırlamak, yeni bir klasöre atlamak için).
  • dirsKayıtlı dizinlerin listesini görmek için kullanın .
  • pd 33 numaralı dizine atlamak için kullanın .

Örnek Kullanım:

$ PS1='\w\$ '   ## just for demo purposes
~$ pd ~/Documents/data
~/Documents/data$ pd ../spec
~/Documents/spec$ pd ~/Dropbox/Public/
~/Dropbox/Public$ pd /tmp
/tmp$ pd /etc/defaults/
/etc/defaults$ dirs
 0  /etc/defaults
 1  /tmp
 2  ~/Dropbox/Public
 3  ~/Documents/spec
 4  ~/Documents/data
 5  ~
/etc/defaults$ pd 2
~/Dropbox/Public$ dirs
 0  ~/Dropbox/Public
 1  ~/Documents/spec
 2  ~/Documents/data
 3  ~
 4  /etc/defaults
 5  /tmp
~/Dropbox/Public$ pd 4
/etc/defaults$ dirs
 0  /etc/defaults
 1  /tmp
 2  ~/Dropbox/Public
 3  ~/Documents/spec
 4  ~/Documents/data
 5  ~
/etc/defaults$ pd 3
~/Documents/spec$ popd
~/Documents/data ~ /etc/defaults /tmp ~/Dropbox/Public
~/Documents/data$ 

6

Aşağıdaki, üzerinde test ettiğim bir dava üzerinde çalışıyor gibiydi ve dizin adlarınızı ~ / Bookmarks içine symlinks olarak bırakabilirsiniz:

mkdir "$HOME/Bookmarks"
ln -s /tmp "$HOME/Bookmarks/testdir"

function ccd() { cd $(readlink "$HOME/Bookmarks/$1") ; }

ccd testdir && echo $PWD
# gives /tmp

ccd () işlevinin terminal isteminde veya başka bir yerde yazması gerekir? pls açıklayabilir misiniz?
saiy2k

1
@ saiy2k: üzgünüm, evet. functionHat çizgileri önce bir isim haline "TestDir" nin test durumda kurmak, (eğer söz konusu pencereyi kapattığınızda gitmiş olacağım test etmek için terminalde yazın, ama) .bashrc girer /tmpve Son satır, çalışıp çalışmadığını görmek için yapılan testtir.
Ulrich Schwarz

6

J2 den daha kötüsünü yapabilirsin .

README'den:

Karmaşık bir dizin ağacının etrafında çok fazla zaman harcamak?

j nerede olduğunuzu ve orada ne kadar zaman geçirdiğinizi izler ve gerçekte kullandığınız dizinlere atlamak için uygun bir yol sunar.

Kapsamlı kullanıyorum ve tavsiye ediyorum.


5

Ben zsh , bu kabuk dizinler, dosyalar ve çoğu cli programları için bile seçenekler için çok iyi bir SEKME tamamlama olarak kullanmanızı tavsiye ediyorum .

Bu kabuğu yıllardır kullanıyorum ve gitmiş olsaydı işlevselliği kaçırabilirdim. Zsh'yi yazmak her gün size yardımcı olabilecek çok sayıda tek gömlek ile çok eğlencelidir .


TAB tamamlama işlemi için zsh'ye gerek yok çünkü bash de aynı. Diğer işlevsellik için belki ama bunun için değil.
Peer Stritzinger

1
@PeerStritzinger Bash, BASH 4.0'da bu tür bir işlevsellik sundu, ancak zsh ile karşılaştırıldığında, hala oldukça gerisinde. "Hepsi aynı" demek kesinlikle yanlıştır.
polemon

Eh zsh kesinlikle übershell'dir, ancak sadece sekme tamamlaması için değişmeye gerek yoktur (bash için soru soruldu). Bash 4.0 yaklaşık 3 yıl önce tanıtıldı ...
Peer Stritzinger

5

Tecrübelerime göre, bir kabuğun içinde gezinmede en büyük hız, geçmiş arama işlevini kullanmaktır. Bash'de komut geçmişinde geriye doğru arama yapabilir ve Ctrl+ tuşlarına basarak Rbir kalıp yazabilirsiniz. Bu şablon daha sonra geçmişinizdeki önceki girişlerle eşleştirilir - cdkomutlar veya diğer işlemler olabilir - ve yazarken önerilerde bulunulur. Önerilen komutu tekrar çalıştırmak için enter tuşuna basın. Buna reverse-search-historyBash denir ve onu seviyorum. Bana çok fazla tuşa basma işlemi kazandırıyor ve dahili hafızamı koruyor.

Eğer sadece bir komut bazı küçük kısmını hatırlamak gibi zorunda çünkü iyi bir şey Dropya da Waiki tarih girişleri arasında ayrım cd ~/Dropbox/Projects/ds/test/ve cd /Project/Warnest/docs/.


5

Bu takma adları da kullanıyorum (~ / .bashrc dizinine ekleyin):

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'

Üst dizine onlarla gitmek çok daha hızlı (ancak navigasyonun sadece yarısını çözüyor).


1
Bunlar yararlı takma adlardır, ancak OP'nin gereksinimlerini karşılayacaklarından tam olarak emin değilim. Bunların OP'nin sorunu için nasıl doğrudan yardımcı olabileceğini önermek için cevabınızı genişletmeyi düşünebilirsiniz.
HalosGhost

4

Eğer zsh kullanıyorsanız:

  • Yazmanız gerekmez cd, sadece dizin yolunu yazın ( /foo/bar/baz<Enter>eşittir cd /foo/bar/baz<Enter>)

    auto_cdayarlanacak seçeneği gerektirir

  • kısaltılmış yolları Tabanahtarla /u/sh/pi<Tab>genişletebilirsiniz ( genişletir /usr/share/pixmaps; dosya adları için de çalışır)

3
Bash 4 kazanmıştır shopt -s autocd, bu yüzden artık sadece bir zsh-iyiliği değildir.
Gilles,

4

Hızlı dizin değişikliği için oldukça iyi bir araç var:

xd - eXtra hızlı Dizin değiştirici http://xd-home.sourceforge.net/xdman.html

garip biraz bunu yalnızca bash profilinde veya benzeri maddelere haritasına ihtiyaç vardır çıkışı dizini

# function to do `cd` using `xd`
# -g turns generalized directory search command processing on
# which improves the whole thing a bit
f() 
{
        cd `/usr/bin/xd -g $*`
}

gibi şeyler yapabilirsiniz:

# change to /var/log/a* (gives you a list to choose from)    
f vla
# to skip the list and go directly to /var/log/apache2
f vlapach

Fonksiyonu f() { cd "$(xd -g "$@")"; }, argümanlardaki aralıklı dizinleri ve boşlukları düzgün bir şekilde işlemek için değiştirin xd(muhtemelen yola ihtiyacınız yoktur). Hiç kullanmadığınız takdirde xdbaşka şekilde, alternatif olarak yapabilirsiniz xd() { cd "$(command xd -g "$@")"; }(alternatif olarak kullanmak /usr/bin/xdyerine command xd- her zaman çalıştırabilirsiniz command xd …bunu atlamak gerekirse).
Adam Katz

4

Zaten asla tam yolunu shell'e yazmamalısınız. Her zaman kullanabilirsiniz:

soffice /P*/W*/*/mydoc*

onun yerine

soffice /Project/Warnest/docs/mydoc.odt

1
Bu sekme tamamlama gibidir, ancak her yönden daha da kötüsü
Michael Mrozek

Project yalnızca P ile başlayan dosya olmadıkça, abqal tuş basma ile tamamlanan sekme ile bunu yapamazsınız . Ayrıca, * kullanarak beklemenize gerek kalmadan her seferinde tamamlanmasını beklemeniz gerekir.
gena2x

Sanırım geri aldığınızı düşünüyorum - P*Project P ile başlayan tek dosya olmadıkça yapamazsınız . Tab tamamlama çevrimi değiştirebilir (çoğu kabukta varsayılan olarak; sekmeyi menu-completebash olarak yeniden bağlamanız gerekir ) ve basit durumlarda anında çözülür böyle, bunun için beklemek yok
Michael Mrozek

'Yapamazsınız' ile ilgili olarak yapabilirsiniz, deneyebilir, yapamayacağınızı düşünüyorsanız tüm noktayı kaçırırsınız. Echo / u * / b * / g ++ 'ı
deneyin

1
Ne demek istediğinizi anlıyorum, belirsiz bir yol yazdığınızdan emin olduğunuz sürece daha hızlı, ancak /P*/W*/*/mydoc*bunun gibi sesler gibi bir şey bir gün o küreyle eşleşen başka bir dosya oluşturmaya başlayana ve aniden sona erecek aynı anda her ikisini de açarak. /u*/*/g++etkileyici birkaç karakter, fakat başlangıç benim kök klasörlerin herhangi birinin alt klasörlerin herhangi başka bir şey değildir umarım uadlandırılır g++. (Güzel bir uzlaşma olarak, bazı mermilerde, ilerlediğiniz yerde küreleri büyütmek için sekme kullanabilirsiniz)
Michael Mrozek

3

Ayrıca OLDPWD, IEEE 1003.1'e (POSIX) göre, çalışma dizinini her cddeğiştirdiğinde önceki çalışma dizini ile güncellenmesi gereken bir ortam değişkeni vardır (meraklı olanlar için, IEEE 1003.1-2008'in sayfa 2506 satırının 80244'ü).


3

Ayrıca bunun için özel olarak yaratılmış bir "wcd" uygulaması da var (çünkü bundan beri cygwin'e aktarılmış). Kısayollar, onunla yer imleri oluşturabilirsiniz. Ayrıca joker kartlarını da destekler. / Usr / share / wcd içindeki man sayfasını ve belgeleri okumak çok yardımcı olacaktır.

http://manpages.ubuntu.com/manpages/hardy/man7/wcd.7.html



3

Fastcd'i deneyin ( https://github.com/frazenshtein/fastcd ) Ziyaret edilen dizinleri bash adresinden kaydeden kanca ayarlar. Ve komut dosyasını "j" diğer adı olarak ayarlar, bu da size en son ziyaret edilen dizinleri gösterir, cd'leri hızlıca yazma (dizinleri filtrelemek için yazmaya başlayın). "J" takma adını yapmak için .bashrc dosyasının değiştirilmesi gerekiyor.

Aracı alma

cd ~; mkdir Soft; cd Soft
git clone https://github.com/frazenshtein/fastcd

Gerekli modülleri yükleyin

pip install --user urwid

Set.sh dosyasını bashrc'nize aktarın

echo -e "\nsource /home/$USER/Soft/fastcd/set.sh\n" >> ~/.bashrc

Ve bashrc'yi güncelleyin

source ~/.bashrc

Sonra konsolda sadece "j" yazın


Bu nasıl çalışıyor? Takma ad ise, bu araç el ile düzenleyerek yapamadığınız ne yapar .bashrc?
G-Man

Başlatılan kabukları (bash) için ziyaret edilen dizinleri ~ / .fastcd biçiminde kaydeden cini başlattı. "j" en son ziyaret edilen dizinleri gösteren ve hızlı bir şekilde cd yapabilme özelliğine sahip bir aracı başlattı. "J" takma adını yapmak için .bashrc dosyasının değiştirilmesi gerekiyor. Daha fazla bilgi için kaynak kodunu görebilirsiniz, sanırım
Sam Toliman

Hızlı cevabın için teşekkürler. Bu cevapta olması gereken bilgi türüdür. Lütfen bu bilgileri eklemek için cevabınızı düzenleyin .
G-Man

3

Aynı sorum vardı ve önce bu cevabı buldum . Z yardımcı programını yükledim ( https://github.com/rupa/z ).

Tam olarak aradığınız şey bu, çünkü z cd komutlarınızdan öğreniyor ve dizinleri takip eden fecency prensibine göre (sık sık ve son zamanlarda) takip ediyor. Böylece, her iki cd komutunu da bir kez yaptıktan sonra, şöyle bir şey yapabilirsiniz:

z docs
z ds

Sırasıyla /Project/Warnest/docs/ve atlamak için ~/Dropbox/Projects/ds/test/. Z'nin argümanları regex'lerdir, bu nedenle tam bir klasör adı girmenize gerek yoktur.



2

Bunu yönetmek için kendi yardımcı program cdhist'imi kullanıyorum . Cd komutunuzu takma adlandırır ve otomatik olarak bir dizin yığını tutar.


2

Sen kullanabilirsiniz exportdeğişkenlere dizin yolları atamak ve sonra bunları referans.

export dir1=/Project/Warnest/docs/
export dir2= ~/Dropbox/Projects/ds/test/
cd $dir1
cd $dir2

Evet, birkaç favori dizin için bu yeterli. Başka bir yardımcı program kurmanıza gerek yok. Sadece exportifadeleri içine koyun ~/.bashrcve her zaman erişilebilir olacaktır.
wisbucky

1

Burada bazı öneriler:

En doğrudan fikir, .profile dosyasına takma ad ekleyeceğim

vi ~/.profile
alias dir1='cd /myhome/onedir'
alias dir2='cd /jimmy/anotherdir'

Sonra kullanın $ dir1 veya dir2cd yapabilirsiniz

Her zaman sadece iki direkte geçiyorsanız. kullanarak cd -aralarında geçiş yapacak.


1

Bu durum için kullandığım çözüm screen. Ekranı başlatın ve her dizin için bir pencere oluşturun C-a cve oraya gidin. Pencereler / dizinler arasında C-a nveya ile değişiklik yapın C-a p. Pencereleri ile adlandırın C-a A. Ardından pencerelerinizin bir listesini açabilir C-a "ve pencere numarasını veya adını kullanarak gezinebilirsiniz. O olduğu için screen, kendi çalışma alanı tasarrufu oturumdan ayırmak ve aynı kurulumu konusunda daha sonra tekrar takmak.


1

İhtiyacınız olan şey temelde iş akışınız için bir proje dosyası gibi görünüyor. Programlama IDE'deki gibi, etkinliğinize ait dizinler. Zsh Navigation Tools uygulamasını ve buradaki aracı deneyin n-cd. Son ziyaret edilen klasörler arasında gezinmenizi ve ayrıca Hotlististediğiniz dizinleri içeren bir tanım tanımlamanızı sağlar :

n-cd

n-cd aşağıdakilerle bir tuş kombinasyonuna bağlanabilir:

zle -N znt-cd-küçük aracı

tuş takımı "^ T" znt-cd-widget


1

TL; DR

  1. Bir kullan Fishinteraktif kabuk için hemen sizi güçlendirmeye ( fish> zsh> bash).
  2. Kullanım POSIX/ Bashkomut dosyası için en yaygın desteklenen sözdizimi ( POSIX> Bash> Zsh> Fish).

kabuklar

Burada farklı mermileri test etmiş olmak benim geri bildirimimdir (test etme / evlat edinme sırasına göre):

  • Bash:
    • otomatik tamamlama: temel;
    • yol genişletme: hayır;
    • komut dosyası yazma: mükemmel.
  • Zsh+ oh-my-zsh:
    • otomatik tamamlama: iyi (geçiş);
    • yol genişletme: evet ( cd /e/x1cd /etc/X11/);
    • komut dosyası: iyi.
  • Fish+ oh-my-fish(geçerli) kutudan çıkarmanın en iyisidir:
    • otomatik tamamlama: yerel ve desteklenen seçenekler;
    • yol genişlemesi: evet;
    • komut dosyası oluşturma: POSIX uyumlu olandan çok fazla fark.

Anlamlı takma ad kullanın

Her kabuk kullanılarak functionve genişletilebilir alias, işte sorununuzla ilgili kullandıklarım (POSIX uyumlu):

back () {  # go to previous visited directory
        cd - || exit
}

up () {  # go to parent directory
        cd ..|| exit
}

Basit, ama gerçekten anlamlı, hatırlaması ve otomatik tamamlaması çok kolay.

Kabuğunu bilin

CDPATHEn çok kullandığınız dizinleri (ör ~/projects/. /etc/init.d/) Eklemek için yapılandırın , böylece bunlara hızlıca atlayabilirsiniz.

Ayrıntılı bilgi için manatwork answerCDPATH .

Hangout ve oku


Bir kabuk işlevi çağırdığında exit, etkileşimli kabuktan çıkarsınız. Bu "anlamlı takma adlar" olabilir alias back='cd -'ve alias up='cd ..'- ama endişelenmeyin, bu komutlar asla yanlış döndürmez (önceki dizin yok mu? Seni eve gönderir! Kökte mi? Hayır-op değil!) Ve bu yüzden asla çıkmazsınız. . Ayrıca alias back='cd $OLDPWD', herhangi bir çıktıya sahip olmayacağı için (tek tırnaklara dikkat edin) düşünün ( cd -sizi nereye gönderdiğini size söyler, bu, isteminizde bu bilginin bulunması nedeniyle gereksizdir)
Adam Katz,

1

ancdizinlerin yer imlerini tutan bir cmd satırı aracıdır (bağlantı için kısa). (şimdiye kadar sadece bash ile test edildi)

Senin durumunda:

anc a /Project/Warnest/docs/ ~/Dropbox/Projects/ds/test/

bu, her iki dizini de çapa (yer imlerini düşün) listesine ekler

Şimdi /Project/Warnest/docs/, sistem tipinizin herhangi bir yerinden atlamak istiyorsanız :

anc Warn

ve yazmak için atlamak istiyorsanız ~/Dropbox/Projects/ds/test/:

anc ds test

İmzalanan yollara göre metni eşleştirmenin yanı sıra, anc, dizinlerin etrafından dolaşmak için birçok uygun yönteme sahiptir.

anc i

Tüm yer imlerini sayıya göre listeleyen etkileşimli modu başlatır, bu nedenle yazmanız gereken tek şey sayıdır.

Eğer yazarsanız:

anc Pro[TAB]

Tüm yer imlerinin (sizin durumunuzda her iki yer işaretinin) eşleşen bir liste görüntülenir ve ok tuşlarını kullanarak seçim yapabilirsiniz, bu çok hızlı ve sezgisel bir yoldur.

Projenin github sayfasında anc alın: https://github.com/tobimensch/anc

Ayrıca örnek kullanımlı bir README var.

Tam açıklama: Bu senaryonun yazarıyım. Umarım bazı insanlar faydalı bulur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.