“ คั่นหน้า” เพื่อทุบตี


24

การนำทางหลายชั้นของไดเรกทอรีที่ซ้อนกันมักจะเจ็บปวด บน Firefox นั้นเป็นเรื่องง่ายเพราะมีบุ๊กมาร์ก ดังนั้นสิ่งที่ฉันต้องการทำเพื่อคั่นหน้าไฟล์คือการพิมพ์:

$ go --add classes "repo/www/public/util/classes"

จากนั้นไปที่ไดเรกทอรีนี้ฉันจะพิมพ์:

$ go classes

ก่อนหน้านี้ฉันใช้ลิงก์สัญลักษณ์เพื่อให้ได้สิ่งที่คล้ายกัน แต่ฉันไม่ต้องการทำให้ไดเรกทอรีบ้านของคุณยุ่งเหยิง มีคุณสมบัติอื่น ๆ อีกมากมายที่สามารถพิสูจน์ได้ว่ามีประโยชน์ ตัวอย่างเช่นฉันต้องการเริ่มพิมพ์go clแล้วกด tab เพื่อเติมข้อความอัตโนมัติ บางครั้งฉันมีที่เก็บหลายชุดถูกเช็กเอาต์และดังนั้นจึงเป็นประโยชน์สำหรับโปรแกรมที่จะอนุญาตให้ฉันสร้างบริบทหลายชุดและตั้งค่าบุ๊กมาร์กที่สัมพันธ์กับไดเรกทอรีฐานบริบท

ดังนั้นก่อนที่ฉันจะปูทางด้วยชุดสคริปต์ของตัวเองด้วยกันมีอะไรแบบนี้ไหม



4
หากคุณเปรียบเทียบ bash กับ firefox ต่อไปจะมีคนสร้างบาร์ที่ยอดเยี่ยมสำหรับ bash :(
hhaamu

คำตอบ:


12

ฉันกำลังมองหาเครื่องมือคั่นหน้าเชลล์อยู่นานเกินไปและฉันไม่พอใจกับวิธีแก้ไขปัญหาใด ๆ ที่ฉันพบ

แต่ในที่สุดผมเคยเจอดีเครื่องมือสากล: บรรทัดคำสั่งค้นหาเลือน

ส่วนใหญ่อนุญาตให้คุณ "fuzzy-find" ไฟล์ (ตรวจสอบภาพเคลื่อนไหว gif ที่อุดมไปด้วยลิงค์ข้างต้น) แต่ก็ยังช่วยให้ฟีดข้อมูลข้อความโดยพลการและกรองข้อมูลนี้ ดังนั้นความคิดทางลัดนั้นง่าย: ทั้งหมดที่เราต้องการคือการรักษาไฟล์ด้วยพา ธ (ซึ่งเป็นทางลัด) และตัวกรองฟัซซี่ไฟล์นี้ นี่คือลักษณะ: เราพิมพ์cdgคำสั่ง (จาก“ cd global” หากต้องการ) รับรายการที่คั่นหน้าของเราเลือกรายการที่ต้องการด้วยการกดแป้นเพียงไม่กี่ครั้งและกด Enter ไดเร็กทอรีการทำงานถูกเปลี่ยนเป็นรายการที่เลือก:

CDG

มันเร็วและสะดวกมาก: โดยปกติฉันพิมพ์ตัวอักษร 3-4 ตัวของรายการที่ต้องการและอื่น ๆ ทั้งหมดจะถูกกรองออกไปแล้ว นอกจากนี้แน่นอนว่าเราสามารถย้ายผ่านรายการด้วยปุ่มลูกศรหรือ/Ctrl+jCtrl+k

บทความรายละเอียดเกี่ยวกับการแก้ปัญหานี้ทางลัด / บุ๊กอยู่ที่นี่: ทางลัดฟัซซี่สำหรับเปลือกของคุณ


19

ผมคิดว่าคุณกำลังมองหาสิ่งที่ต้องการautojump คุณต้องทำ cd สักหน่อยเพื่อพัฒนาชุด "key weights" ที่สัมพันธ์กับระยะเวลาที่ใช้ในไดเรกทอรีที่กำหนด จากนั้นสมมติว่าคุณใช้เวลาเป็นจำนวนมากใน 'dir' ของคลาสนั้นคุณสามารถกระโดดไปที่นั่นได้โดยตรงโดยพิมพ์

j cl

คุณสามารถดู "น้ำหนักสำคัญ" ของคุณด้วย

jumpstat

เมื่อเร็ว ๆ นี้ฉันพบว่าซับซ้อนขึ้นเล็กน้อย แต่น่าสนใจและเกี่ยวข้องกับเครื่องมือที่เรียกว่าf: github.com/clvv/f
tcdyl

14

นามแฝงเป็นกลไกที่ดี CDPATHเปลือกทุบตีนอกจากนี้ยังมีในตัวกลไกในการกระโดดไปยังสถานที่: ตั้งค่าเหมือนPATHแต่มันถูกใช้โดยcdแทนที่จะค้นหาโปรแกรม

$ CDPATH=:~/repo/www/public/util
$ cd classes
/home/casebash/repo/www/public/util/classes

จาก manpage:

   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.   A  sample  value  is
          ".:~:/usr".

ตัวฉันเองฉันได้รวมสิ่งนี้เข้ากับไดเรกทอรีที่มีลิงก์ไปยังที่ที่ฉันต้องการไป:

$ mkdir ~/cdshortcut
$ ln -s ~/repo/www/public/util/classes ~/cdshortcut/classes
$ CDPATH=:~/cdshortcut
/home/casebash/cdshortcut/classes

นี้มีข้อเสียเปรียบว่าไดเรกทอรีที่ไม่ค่อยปรากฏว่าถูกต้อง แต่ที่สามารถแก้ไขได้โดยใช้หรือการตั้งค่าcd -Pset -P


CDPATH นั้นน่าสนใจ แต่มันก็คุ้มค่าที่จะใช้คำสั่ง go แยกต่างหากเพื่อให้พฤติกรรมนั้นสามารถคาดเดาได้เสมอ
Casebash

1
+1 สำหรับชุด -P symlink ของฉันบางตัวทำให้ฉันคลั่งเพราะฉันจำไม่ได้ว่าพวกเขาไปไหนและไม่จำคำสั่งที่แสดงข้อมูลนั้น
Joe

@ โจฉันจะเพิ่มalias C='cd -P .'มากกว่าset -Pเพราะลิงก์ระบบฉันไม่รังเกียจที่จะอยู่ในไดเรกทอรี symlink
Wildcard

@ Wildcard - น่าสนใจ - คุณยกตัวอย่างที่ทำให้เกิดความแตกต่างกับคุณได้หรือไม่? ฉันเพิ่งวิ่งhelp cdและยังไม่เข้าใจว่าตัวเลือก -P ทำอะไร
Joe

@Joemkdir test; ln -s test linktotest; cd linktotest; pwd; cd -P .; pwd
Wildcard

9

คุณสามารถรวมคุณลักษณะการค้นหาประวัติและประวัติของ Bash ที่มีอยู่ กดCtrl-Rเพื่อเริ่มการค้นหาแบบย้อนกลับที่เพิ่มขึ้นจากนั้นเริ่มพิมพ์ส่วนของเส้นทางที่มีแนวโน้มว่าจะไม่ซ้ำกัน

คุณสามารถพิมพ์ตัวอักษรต่อไปได้จนกว่าคุณจะกลับมาที่cdคำสั่งล่าสุดที่เกี่ยวข้องกับไดเรกทอรีนั้นหรือคุณสามารถกดCtrl-Rอีกครั้งเพื่อย้อนกลับไปในประวัติศาสตร์ไปยังคำสั่งใหม่ล่าสุดถัดไปที่ตรงกับสิ่งที่คุณพิมพ์

ฉันทำสิ่งนี้ตลอดเวลา

ที่จริงฉันก้าวไปอีกขั้น เมื่อฉันเริ่มต้นการค้นพบลำดับของคำสั่งที่มูลค่าการรักษาในประวัติศาสตร์ แต่ไม่คุ้มค่า committing เพื่อสคริปต์เปลือกผมเริ่มผูกมัดพวกเขาด้วย&&และ;combinators ดังนั้นฉันสามารถย้อนกลับค้นหาย่อยของที่หนึ่งคำสั่งที่ยาวตีEnterและเรียกใช้ทั้งลำดับที่ ครั้งหนึ่ง

ตัวอย่างเช่นนี่คือวิธีที่ฉันสร้างและเรียกใช้หนึ่งในโปรแกรมของฉันในระหว่างการพัฒนา:

$ ( cd .. ; make install ) && ./start_my_program

ฉันทำสิ่งนี้จากไดเรกทอรีการติดตั้งซึ่งอยู่ภายใต้ไดเรกทอรีแหล่งระดับบนสุด โดยการตัดส่วนcdสร้างและติดตั้งในเชลล์ย่อยฉันมั่นใจว่าไม่ว่าจะเกิดอะไรขึ้นในระหว่างกระบวนการนี้ฉันก็กลับมาอยู่ในเชลล์ปกติโดยไม่มีอะไรเปลี่ยนแปลง หากฉันประสบความสำเร็จ (&&) ฉันจะเริ่มโปรแกรมที่ติดตั้งและติดตั้งแล้ว ฉันสามารถค้นพบสิ่งนี้ได้ในประวัติศาสตร์ของฉันในCtrl-Rตอนนั้นstaนั่นคือทั้งหมดที่ฉันมักจะต้องค้นหาลำดับคำสั่งนี้โดยเฉพาะ

อีกตัวอย่างของวิธีที่ฉันใช้นี่คือลำดับที่จะสร้าง RPM สำหรับโปรแกรมเดียวกันนี้ งานที่น่าเบื่อส่วนใหญ่อยู่ในเชลล์สคริปต์ แต่ก็ยังมีคำสั่งไม่กี่คำที่ปกติแล้วฉันต้องพิมพ์เพื่อทำงานทั้งหมดของการสร้างและปรับใช้ RPM ที่สร้างขึ้นซึ่งตอนนี้ฉันแทบจะไม่ต้องพิมพ์ซ้ำเพราะ Bash เก็บ ในประวัติศาสตร์สำหรับฉัน

รวมสิ่งเหล่านี้เข้าด้วยกันexport HISTSIZE=bignumและshopt histappendคุณได้สร้างหน่วยความจำคำสั่งของช้าง

ผมแก้ปัญหาอีกครั้งหนึ่งรหัสขึ้นอยู่ในคำตอบของฉันไปอีกคำถามหนึ่งที่นี่ อาจต้องปรับให้เหมาะกับวัตถุประสงค์ของคุณและจัดการกับcdคำสั่งเท่านั้นในขณะที่ตัวเลือกการค้นหาประวัติทำงานได้ทุกที่และทุกคำสั่ง


6

ฉันใช้aliasเพื่อย่อเส้นทางที่ยาวซึ่งฉันไปเยี่ยมบ่อยๆ คุณสามารถใส่ชุดของaliases ไว้ในของคุณbashrcดังนั้นทุบตีสามารถจดจำพวกเขาทุกครั้งที่คุณเข้าสู่ระบบ และโชคดีที่ทุบตีเพิ่มนามแฝงในการทำให้สมบูรณ์อัตโนมัติ

ฉันจะเขียนบางอย่างเช่นนี้สำหรับกรณีของคุณ: alias go-classes="cd ~/repo/www/public/util/classes"


6

คุณอาจกำลังมองหาbashmarks (บน github)
จาก README:

Bashmarks เป็นเชลล์สคริปต์ที่ให้คุณบันทึกและข้ามไปยังไดเรกทอรีที่ใช้กันทั่วไป ขณะนี้สนับสนุนการเติมเต็มของแท็บ


4

สิ่งนี้ไม่ได้สมบูรณ์แบบหรือไร้สาระ แต่เป็นแบบร่างที่จะเริ่มต้นด้วย โดยการเพิ่มสิ่งต่อไปนี้ในของ~/.bashrcคุณคุณจะมีสามคำสั่งในการเพิ่มการลบและรายการบุ๊กมาร์กไดเร็กทอรี

BMFILE=~/.bash.bookmarks
[ -f "$BMFILE" ] && . "$BMFILE"

bmadd() {
    local abm
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    abm="alias $bm='cd \"$(pwd)\"'"

    if grep -q " $bm=" "$BMFILE"; then
        echo "Overwriting existing bookmark $bm"
        bmdel "$bm"
    fi
    echo "$abm" >> "$BMFILE"
    eval "$abm"
    #source "$BMFILE"
}

bmdel() {
    local bms
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    #sed -i.bak "/ $bm=/d" "$BMFILE"
    bms=$(grep -v " $bm=" "$BMFILE")
    echo "$bms" > "$BMFILE"
    unalias "$bm" 2> /dev/null
}

bmlist() {
    sed 's/alias \(.*\)=.cd "\(.*\)".$/\1\t\2/' "$BMFILE" | sort
}

การใช้งานค่อนข้างง่าย bmaddด้วยอาร์กิวเมนต์จะเพิ่มชื่อแทนตามอาร์กิวเมนต์ นามแฝงนี้จะสร้างซีดีไปยังไดเรกทอรีที่ตั้งไว้โดยไม่มีอาร์กิวเมนต์มันใช้ dirname ปัจจุบันเป็นชื่อนามแฝง ในทำนองเดียวกันให้bmdelลบนามแฝงหากมีอยู่และbmlistแสดงรายการบุ๊กมาร์กปัจจุบัน

เช่น

u@h:~ $ cd /usr/share/doc
u@h:/usr/share/doc $ bmadd
u@h:/usr/share/doc $ cd /usr/local/share/
u@h:/usr/local/share $ bmadd lshare
u@h:/usr/local/share $ cd
u@h:~ $ bmlist
doc     /usr/share/doc
lshare  /usr/local/share
u@h:~ $ doc
u@h:/usr/share/doc $ bmdel lshare
u@h:/usr/share/doc $ bmlist
doc     /usr/share/doc
u@h:/usr/share/doc $

4

ฉันได้พบกับความต้องการเดียวกันเมื่อไม่นานมานี้และตัดสินใจที่จะรวมสคริปต์ไว้สองชุดเพื่อช่วยให้ฉันคั่นหน้าเส้นทางสัมพัทธ์ / สัมพัทธ์และแมปกับชื่อสั้น ๆ ที่ฉันจำได้ง่าย

สคริปต์ใช้งานง่ายมากและจะสร้างฟังก์ชันที่มีชื่อย่อที่คุณให้ไว้เป็นชื่อแทนไปยังไดเรกทอรีที่คุณต้องการข้ามไป สิ่งที่คุณต้องทำคือเพียงพิมพ์ชื่อสั้น ๆ และมันจะนำคุณไปยังไดเรกทอรีที่คั่นหน้า

นี่คือลิงค์ไปยังแหล่งที่มาของสคริปต์ bookmarker โดยวิธีการที่ฉันชื่อมันบุ๊คมาร์ค

การใช้

เมื่อติดตั้งแล้วมันเป็นเรื่องเล็กน้อยที่จะใช้

วิธีทำเครื่องหมายไดเรกทอรี:

$ mark /this/is/a/very/very/looooong/path mydir

วิธีนำทางไปยัง dirctory ที่ทำเครื่องหมายไว้:

$ mydir

หากต้องการดูสิ่งที่ถูกทำเครื่องหมาย:

$ marks
bin     -> /Users/khafaji/bin
eBooks  -> /Users/khafaji/eBooks

วิธีลบไดเรกทอรีที่ทำเครื่องหมายไว้:

$ umark myDir

สำหรับตัวอย่างเพิ่มเติมคำแนะนำการติดตั้ง ฯลฯ ดูมากเอกสารรายละเอียด


3

cdargs เป็นเครื่องมือที่ดีที่สุดสำหรับการทำบุ๊คมาร์คไดเรกทอรี

สำหรับตัวอย่างการใช้งานให้ดูที่คั่นหน้าสำหรับวิดีโอคำสั่ง cdบน YouTube

ตัวอย่างการใช้งาน

cdargsเป็น ncurses GUI ดังนั้นคุณจึงสามารถนำทางภายในเชลล์ได้ เมื่อติดตั้งแล้วคุณจะตั้งค่าในเชลล์ที่กำหนดโดยการจัดหาเชลล์สคริปต์:

$ source /etc/profile.d/cdargs.sh

สิ่งนี้ทำให้หลายฟังก์ชั่นที่คุณสามารถเรียกจากเชลล์

เรียก GUI:

$ cv

ผลลัพธ์ใน GUI ประเภทนี้:

   [.       ]  /home/saml/tst/88040
 0 [path0   ]  /home/saml/tst/88040/path0
 1 [path1   ]  /home/saml/tst/88040/path1
 2 [path2   ]  /home/saml/tst/88040/path2

คุณสามารถใช้ปุ่มลูกศรเพื่อเลื่อนขึ้นและลงเพื่อเลื่อนดูรายการ ลูกศรซ้าย ( ) ขึ้นไปอีกระดับในแผนผังไดเรกทอรีลูกศรขวา ( ) จะเจาะลึกลงในไดเรกทอรี

ทำเครื่องหมายไดเรกทอรี:

คุณสามารถใช้cสำหรับไดเรกทอรีปัจจุบันที่คุณนำทางหรือคุณสามารถใช้aเพื่อเพิ่มไดเรกทอรีที่คุณกำลังเน้นด้วยเคอร์เซอร์

โหมดการทำงาน:

cdargsมีลักษณะคล้าย vi / vim เล็กน้อยในเรื่องนี้ซึ่งมีความคิดเกี่ยวกับโหมดนี้ มี 2 ​​คนกำลังค้นหา (B) และรายชื่อ (L) คุณสามารถดูโหมดที่คุณใช้ในการแสดงผลที่ด้านล่างของเชลล์

โหมดรายการ:

L: /home/saml/tst/88038

โหมดการท่องเว็บ:

B: /home/saml/tst/88038

คุณสามารถเปลี่ยนโหมดได้โดยกดปุ่มแท็บ ( TAB)

นี่เป็นเพียงส่วนเล็ก ๆ ของภูเขาน้ำแข็งปรึกษา man page ( man cdargs) และความช่วยเหลือในตัวสำหรับข้อมูลเพิ่มเติม


2

เครื่องมือที่ดีที่สุดสำหรับเรื่องนี้คือ: WCD ฉันได้ทดสอบเครื่องมืออื่น ๆ มากมายและเครื่องมือนี้ใช้ในแบบที่คุณต้องการและมีความรู้สึกที่ดีกว่าโซลูชันก่อนหน้านี้ทั้งหมด


1

คำตอบอื่น ๆ นั้นยอดเยี่ยมและเจาะจง อีกวิธีในการดูคือใช้ตัวประมวลผลแมโครของแป้นพิมพ์ที่สามารถทำเกือบทุกอย่างที่คุณคิด

ตรวจสอบ AutoKey มันสามารถแทนที่วลีเช่นโปรแกรมประมวลผลคำอัตโนมัติหรือแก้ไขประวัติทุบตีและยังสามารถรันสคริปต์ python บนฮอตคีย์ที่คุณกำหนดซึ่งสามารถทำเกือบทุกอย่างและส่งการกดแป้นพิมพ์ไปยังอุปกรณ์ป้อนข้อมูลอักขระของคุณเช่นเดียวกับที่คุณพิมพ์

"ข้อบกพร่อง" เพียงอย่างเดียวที่มี (เกี่ยวกับคำถามนี้) คือมันต้องการ gui ที่จะเรียกใช้ - gnome หรือ kde คำตอบอื่น ๆ ไม่มีข้อกำหนดนี้

https://code.google.com/p/autokey/

1

มีทางเลือกอื่นที่เรียกว่าเป็นZ

มันเรียนรู้เกี่ยวกับการเปลี่ยนแปลงทุกไดเรกทอรี:

$ cd /tmp/
$ pwd
/tmp
$ cd
$ pwd
/home/user

จากนั้นคุณสามารถเปลี่ยนเป็นไดเร็กทอรีนั้นในภายหลังด้วยการจับคู่แบบคลุมเครือ:

$ z mp
$ pwd
/tmp

1

Apparixเป็นอีกหนึ่งเครื่องมือที่ทำสิ่งนี้ หนึ่งในคุณสมบัติที่มีประโยชน์คือคุณสามารถข้ามไปยังไดเรกทอรีย่อยของเครื่องหมายและแท็บเสร็จสมบูรณ์ในไดเรกทอรีย่อยเหล่านั้น


0

วิธีการแก้ปัญหาอีกประการหนึ่งที่ผมเชื่อว่าคือการautojumpและเป็นzfasd

มันจะติดตามว่าไดเรกทอรีใดที่คุณเข้าชมและz dir-nameจะเปลี่ยนเป็นไดเรกทอรีที่มีชื่อdir-nameที่คุณใช้บ่อยที่สุด นอกจากนี้ยังมีฟังก์ชันบางอย่างสำหรับไฟล์ที่ใช้บ่อย

คุณสามารถโคลนได้จาก: https://github.com/clvv/fasd

การติดตั้งเป็นแบบตรงไปข้างหน้าโคลนทำการติดตั้งแล้วปรับเปลี่ยน.bashrc(หรือ.zshrcอื่น ๆ )


0

คุณต้องเพิ่มนามแฝงที่คุณหรือ.bashrc.bash_profile

## navigate to your home directory
$ cd ~
## list the contents of your home directory to see if you have `.bashrc` or `.bash_profile`
$ ls -a 
[`.bashrc` or `.bash_profile` should appear in the list]
## launch the text editor of your choice; I'll use vim here
## if no `~/.bashrc` or `~/.bash_profile`...
$ vim
## if, e.g., `~/.bash_profile` listed...
$ vim ~/.bash_profile

ตอนนี้สมมติว่าคุณต้องการทางลัด ~/Desktop/Coding/Projects , goto_Projsการเรียกที่คุณจะพิมพ์ คุณต้องเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ที่เปิดใน text editor:

alias goto_Projs='cd ~/Desktop/Coding/Projects'

ตอนนี้ทำทุกสิ่งที่ตัวแก้ไขข้อความของคุณต้องการให้คุณทำเพื่อบันทึก (เป็น /User/<yourusername>/หรือ~/แน่นอน) และออกและเมื่อเชลล์พร้อมท์ส่งคืน

source ~/.bash_profile

นามแฝงของคุณควรพร้อมที่จะเรียกใช้ตามที่อธิบายไว้ข้างต้น


0

ฉันใช้วิธีการต่อท้ายความคิดเห็นที่ส่วนท้ายของคำสั่งแล้วเรียกใช้ ctrl Rเพื่อย้อนกลับค้นหาความคิดเห็น นี่มีข้อดีดังต่อไปนี้:

  • ค้นหาคำสั่งในภาษาธรรมชาติ
  • เปลี่ยนความคิดเห็นได้ทุกเมื่อในทันทีและรับอัปเดตล่าสุดจาก ctrl R
  • ใช้ctrl Rและtabทันทีเพื่อปรับแต่งเล็กน้อยให้กับคำสั่งของตัวเองดังนั้นการแสดงความคิดเห็นจึงเป็นทางลัดทั่วไปสำหรับตระกูลของคำสั่งที่คล้ายกัน
  • ไม่ต้องตั้งค่าติดตั้งหรือเก็บหนังสือ :-)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.