อัตโนมัติสมบูรณ์สำหรับคำสั่งบรรทัดคำสั่งที่ใช้บ่อยหรือไม่


15

สำหรับบางโครงการฉันมักพิมพ์คำสั่งคู่เช่น:

cd an/extremely/long/path/in/which/I/have/some/kinda/project

และ

./runmyproject --with some --command line --options set

เมื่อเห็นว่าฉันค่อนข้างขี้เกียจฉันพยายามหลีกเลี่ยงการพิมพ์คำสั่งเหล่านั้นอย่างเต็มที่ซ้ำแล้วซ้ำอีก แน่นอนว่าฉันสามารถใช้คีย์ up-key เพื่อค้นหาคำสั่งเหล่านั้นกลับมา แต่บ่อยครั้งที่ฉันมีคำสั่งมากมายระหว่างนั้นการค้นหามันใช้เวลามากกว่าการพิมพ์

ตอนนี้ฉันสงสัยว่ามียูทิลิตี้บางประเภทที่สามารถแนะนำคำสั่งเต็มรูปแบบที่ฉันใช้บ่อยๆได้หรือไม่เมื่อฉันยังไม่ได้พิมพ์เลย เพื่อให้ฉันสามารถพิมพ์ 'cd an /' และมันแนะนำเส้นทางที่เหลืออยู่แล้วเพราะฉันใช้มันมากในเดือนที่ผ่านมา

ฉันพบสิ่งที่เรียกว่า Bash Smart Complete แต่นั่นก็เป็น "โง่" เล็กน้อยซึ่งไม่ได้ดูคำสั่งที่ฉันใช้มาก่อน ฉันเพิ่งค้นพบคำตอบ SO นี้ซึ่งแนะนำให้วางคำสั่งที่ฉันใช้บ่อยๆในไฟล์ อย่างไรก็ตามไม่ตอบสนองพอที่ฉันจะต้องสร้างไฟล์ใหม่ทุกครั้งที่ฉันเริ่มโครงการใหม่หรือเปลี่ยนโฟลเดอร์หรือข้อโต้แย้งของโปรแกรม

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

[แก้ไข] ด้านล่างเป็นคำตอบที่ดีจริงๆ ฉันยังทำเครื่องหมายว่าเป็นคำตอบที่แน่นอน ไม่ใช่เพราะฉันไม่ชอบคำตอบที่ฉันทำ แต่เพราะไม่มีใครที่จะเป็นผู้ชนะแน่นอน ฉันคิดว่า Finalterm เป็นโครงการที่ยอดเยี่ยม น่าเสียดายที่มันยังค่อนข้างหยาบอยู่รอบ ๆ ขอบ ตัวอย่างเช่น; ยังไม่รองรับการคัดลอกวาง ฉันจะจับตาดูโครงการนี้เพราะเมื่อมันจะเติบโตฉันคิดว่ามันจะเป็นแอพพลิเคชั่นที่ยอดเยี่ยม สำหรับคำตอบอื่น ๆ ; พวกเขาแนะนำให้สร้างนามแฝงซึ่งไม่ใช่สิ่งที่ฉันต้องการทำเพราะมันสร้างงานพิเศษแทนที่จะเอางานออกไปหรือใช้ Ctrl + R ซึ่งเป็นสิ่งที่ยอดเยี่ยม (ฉันไม่รู้เกี่ยวกับมัน!) มีคนสองคนแนะนำให้ใช้ Ctrl + R ดังนั้นฉันจึงไม่สามารถเน้นคำตอบหนึ่งไปยังอีก

ดังนั้นสำหรับตอนนี้ฉันใช้ Ctrl + R แน่นอนและในอนาคตฉันอาจใช้ Finalterm

ขอบคุณสำหรับคำตอบที่ยอดเยี่ยมทั้งหมด!


2
zshคุณควรลอง มันมีทุกสิ่งที่คุณขอและอีกมากมาย ย้ายจาก bash เป็น zsh
Basharat Sialvi

ตามหน้า man ของ BASH ฟังก์ชั่นนี้ยังมีอยู่ใน BASH ว่าเป็น "dynamic-complete-history" โดยค่าเริ่มต้นมันถูกผูกไว้กับ Alt + Tab ทำให้ไร้ประโยชน์ แต่สามารถเปลี่ยนการผูกด้วย "ผูก"
Boris Bukh

1
@BasharatSial zsh ทำอะไรเป็นพิเศษเพื่อช่วยในเรื่องนี้?
poolie

คำตอบ:


16

.bash_historyหากคำสั่งที่มักจะใช้พวกเขาจะถูกบันทึกไว้ในแทร็คประวัติคำสั่งทุบตีใน

ตอนนี้เคล็ดลับ: คุณสามารถย้อนกลับค้นหาประวัตินี้อีกครั้งรันคำสั่งโดยการกดCTRL-R

ในโหมดค้นหาประวัติผกผัน bash แสดงสดขณะที่คุณพิมพ์คำสั่งล่าสุดในประวัติที่ขึ้นต้นด้วยอินพุตที่คุณกำหนด จากนั้นกด Enter เพื่อยอมรับและดำเนินการคำสั่งที่เสนอ กด CTRL-R ต่อไปเพื่อหมุนเวียนไปยังคำสั่งที่เก่ากว่าด้วยคำนำหน้าเดียวกัน

นี่คือในตัวทุบตีไม่จำเป็นต้องปรับแต่งสคริปต์หรือติดตั้งซอฟต์แวร์ :) มันเป็นหนึ่งในคุณสมบัติที่มีประโยชน์ที่สุดของ bash, imho


3
ใช้ [ CTRL-g ] เพื่อหนีออกจากโหมดค้นหาประวัติหากไม่ดำเนินการคำสั่ง (เช่นหากคุณไม่พบสิ่งที่คุณต้องการ)
MountainX-for-Monica

8

วาง (Ctrl-Shift-V) ต่อไปนี้ในหน้าจอเทอร์มินัล:

echo '"\e[A": history-search-backward' > ~/.inputrc
echo '"\e[B": history-search-forward' >> ~/.inputrc
echo 'set show-all-if-ambiguous on' >> ~/.inputrc
echo 'set completion-ignore-case on' >> ~/.inputrc

ออกจาก (Ctrl-D) หน้าจอเทอร์มินัลจากนั้นเปิดเทอร์มินัลอีกครั้ง

ตอนนี้คุณสามารถพิมพ์อักขระสองสามตัวแรกจากนั้นกดขึ้นหรือลงเพื่อเลื่อนดูรายการที่กรอง


3
นี่คือคำตอบที่ง่ายที่สุดที่จะทำให้งานสำเร็จ!
cxrodgers

8

วาระสุดท้าย

มีแนวโน้มมากนี้เทอร์มิ App เรียกว่าเป็นระยะสุดท้าย ในบรรดาคุณสมบัติต่าง ๆ มันมีประวัติคำสั่ง remebering เพื่อให้คุณสามารถเลือกได้ นี่คือคุณสมบัติเพิ่มเติม:

วาระสุดท้าย

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ในบทความ

นี่คือเว็บไซต์จากผู้สร้าง http://finalterm.org/

เพื่อทำการติดตั้ง

sudo add-apt-repository ppa:versable/finalterm-daily
sudo apt-get update
sudo apt-get install finalterm

คำเตือน

ฉันได้บอกว่ามันมีแนวโน้ม ปัญหาเดียวคือมันเป็นรุ่น 0.1 ดังนั้นบางสิ่งที่ชอบvimและnanoทำงานได้ไม่ดีเลย ฉันยังสังเกตเห็นว่ามันยังไม่รองรับการลากและวางและคัดลอกและวาง แต่มันมีคุณสมบัติที่คุณร้องขอ เมื่อซอฟต์แวร์เติบโตขึ้นจะกลายเป็นหนึ่งในเทอร์มินัลที่ดีที่สุดสำหรับเดสก์ท็อป

ภาพหน้าจอ

นี่คือฟังก์ชั่นการทำงาน:

 ฟังก์ชั่นในการดำเนินการ

หวังว่านี่จะช่วยได้

* ฉันอยู่ที่ Saucy ดังนั้นฉันจึงมีพื้นหลังเป็น Salamander :)


ขอบคุณสำหรับทิป! ฉันเช็คเอาท์รอบชิงชนะเลิศและมันก็ดูดี น่าเสียดายที่มันยังไม่รองรับ copy-paste ฉันลอง Ctrl + V, Ctrl + Shift + V แล้วคลิกขวา แต่ดูเหมือนว่ามันจะไม่ทำงานเลย ดังนั้นฉันจะเก็บเรื่องนี้ไว้ในอนาคต!
kramer65

นั่นคือข้อเสียเปรียบที่ใหญ่ที่สุดที่ฉันเห็น อย่างไรก็ตามโครงการนี้ยังเด็กดังนั้นฉันหวังว่าจะมีการเพิ่มในไม่ช้า ฉันสามารถดูแอพพลิเคชั่นเทอร์มินัลโดยไม่สนับสนุนการคัดลอกวาง
Max Tither

7

ใช้สำหรับคำสั่งของคุณทั้งหมดหรือเพิ่มไดเรกทอรีในของคุณalias $PATHนอกจากนี้คุณไม่จำเป็นต้องเปลี่ยนไดเรกทอรีเป็นไฟล์ที่เรียกใช้งาน (หรือสคริปต์หรืออะไรก็ตาม) เพื่อเรียกใช้ดังนั้นจึงค่อนข้างง่าย ทั้งสองวิธีนี้จะให้คุณรีสตาร์ทเครื่องที่คุณใช้ก่อนที่การเปลี่ยนแปลงจะมีผล

ต่อไปนี้เป็นวิธีสร้างbash aliasตัวอย่าง (เพิ่มบรรทัดต่อไปนี้ใน~/.bashrcไฟล์ของคุณ):

alias runmyproject='an/extremely/long/path/in/which/I/have/some/kinda/project/runmyproject --with some --command line --options set'

ด้วยวิธีนี้สิ่งที่คุณต้องทำคือป้อนข้อมูลrunmyprojectลงในเทอร์มินัลไม่ว่าคุณจะอยู่ที่ใดโดยไม่ต้องระบุตัวเลือก / อาร์กิวเมนต์

หรือคุณสามารถเพิ่มเส้นทางโครงการของคุณลงใน$PATHตัวแปรสภาพแวดล้อมของคุณ โดยเพิ่มบรรทัดต่อไปนี้ใน~/.bashrcไฟล์ของคุณ:

PATH=an/extremely/long/path/in/which/I/have/some/kinda/project:$PATH
export PATH

ในกรณีนี้คุณจะต้องระบุตัวเลือก / อาร์กิวเมนต์สำหรับปฏิบัติการของคุณเมื่อใช้งาน


1
สิ่งนี้คือฉันต้องการให้เครื่องตอบสนองต่อการใช้งานของฉัน ด้วยสิ่งนี้ฉันต้องเปลี่ยนนามแฝงทุกครั้งที่ฉันเริ่มทำงานกับโครงการใหม่หรือเมื่อฉันเปลี่ยนโครงสร้างไดเรกทอรีของโครงการของฉัน ส่วนหลักของคำถามของฉันคือฉันต้องการให้เรียนรู้จากสิ่งที่ฉันใช้แทนฉันบอกว่าจะทำอย่างไร
kramer65

ฉันเห็นแล้ว จากนั้นคำตอบที่ได้รับความนิยมสูงสุดในขณะนี้ควรทำเคล็ดลับ หรืออย่างน้อยก็ใกล้เคียง
oaskamay

4

เมื่อฉันพบว่าตัวเองต้องเปลี่ยนเป็นไดเรกทอรีเช่นนี้บ่อยๆ:

cd an/extremely/long/path/in/which/I/have/some/kinda/project

ฉันจะทำเช่นนี้เพียงครั้งเดียว:

ln -s an/extremely/long/path/in/which/I/have/some/kinda/project ~/project

และหลังจากนั้นให้ใช้:

cd ~/pr[tab]

เมื่อมันมาถึง:

./runmyproject --with some --command line --options set

ฉันจะใช้การค้นหาประวัติทุบตี ที่พรอมต์คำสั่งเพียงกด Ctrl-R แล้วพิมพ์ 'runmy' Voila คำสั่งทั้งหมดพร้อมตัวเลือกทั้งหมดตามที่ป้อนครั้งสุดท้ายมีสิทธิ์ที่จะถูกป้อนอีกครั้ง หากฉันไม่ชอบตัวเลือกที่ฉันใช้ครั้งล่าสุดและต้องการดูคำสั่งก่อนหน้านี้ฉันจะกด Ctrl-R เพื่อวนรอบคำสั่งก่อนหน้าทั้งหมดที่มีคำว่า "runmy"

การค้นหาประวัติ Ctrl-R สามารถช่วยได้ด้วยคำสั่ง 'cd' เช่นกันหากคุณไม่ชอบแนวคิด symlink [Ctrl-R] ​​/ projมีแนวโน้มที่จะนำคำสั่งสุดท้ายที่คุณใช้ในการ cd กลับไปยังไดเรกทอรีนั้น

แทนที่จะเพิ่มนามแฝงหรือเปลี่ยนเป็นเชลล์พิเศษฉันชอบที่จะเรียนรู้การใช้คุณสมบัติทุบตีที่ออกแบบมาเพื่อช่วยในสิ่งนี้ ด้วยวิธีนี้ฉันสามารถใช้คุณสมบัติเดียวกันบนเครื่องระยะไกลหรือหากฉันต้องนั่งลงที่สถานีของเพื่อนร่วมงาน


ขอบคุณสำหรับคำแนะนำของคุณ สิ่งคือฉันไม่ต้องการตั้งค่าสิ่งอื่นที่ฉันได้ดูแลเมื่อตัวอย่างเช่นการเปลี่ยนแปลงโฟลเดอร์โครงการหรือฉันเริ่มโครงการใหม่ สิ่งนี้คือฉันต้องการให้เครื่องตอบสนองต่อการใช้งานของฉัน ส่วนหลักของคำถามของฉันคือฉันต้องการให้เรียนรู้จากสิ่งที่ฉันใช้แทนฉันบอกว่าจะทำอย่างไร ฉันชอบฟังก์ชั่น Ctrl-R จริงๆ ขอบคุณสำหรับสิ่งนั้น!
kramer65

4

hit control + r บนคีย์บอร์ดของคุณ - มันจะทำให้คุณอยู่ในโหมดย้อนกลับประวัติและคุณสามารถพิมพ์ส่วนที่คุณรู้และคำสั่งทั้งหมดจะแสดง

มีวิธีอื่น ๆ ที่ระบุไว้ที่นี่

http://www.talug.org/events/20030709/cmdline_history.html

ฉันมักจะใช้การควบคุม R มากที่สุด


2

ลองสิ่งนี้ ... วิธีนี้ใช้ได้กับทุกคำสั่งในไฟล์ประวัติของคุณ ... เหมือนกับCtrl+ Rแต่ฉันคิดว่ามันใช้งานง่ายกว่า :)

  1. แก้ไข /etc/inputrc

    sudo vim /etc/inputrc
  2. ไม่ใส่เครื่องหมายข้อคิดเห็นหรือเพิ่มสองบรรทัดนี้

    "\e[5~": history-search-backward
    
    "\e[6~": history-search-forward
  3. ออกจากระบบ / เข้าสู่ระบบ


จากนั้นลองเขียนคำสั่งที่ปรากฏในประวัติ ...

ชอบ...

ls -lah

เขียน

ls

และกด

Page UpหรือPage Dnนำทางไฟล์ประวัติของคุณในการค้นหาคำสั่งที่ขึ้นต้นด้วย "ls"

หากคุณทำทุกอย่างถูกต้องควรดำเนินการตามคำสั่งของคุณโดยอัตโนมัติ ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.