วาดแบบโต้ตอบจากประวัติทุบตีเพื่อสร้างคำสั่งทั้งหมด?


1

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

ตัวอย่างเช่นฉันอาจพบไฟล์สองไฟล์โดยใช้ ls:

$ ls ../../blah/foo/bar/CMakeLists.txt

$ ls /usr/include/c++/4.7.2/armv7l-unknown-linux-gnueabihf/bits/c++config.h

ตอนนี้ฉันต้องการปัดเส้นทางที่สองไปสู่ไฟล์แรก ฉันเริ่มต้นด้วยการกดลูกศรขึ้น จากนั้น CTRL + A; และลบ ls จากจุดเริ่มต้นโดยใช้การลบ:

$ /usr/include/c++/4.7.2/armv7l-unknown-linux-gnueabihf/bits/c++config.h

ตอนนี้ฉันต้องการใช้ & gt; & gt; เพื่อผนวกเส้นทางนี้ไปยังไฟล์ CMakeLists.txt ซึ่งฉันจะแก้ไขในภายหลังจากภายในตัวแก้ไขข้อความ คำสั่งที่ฉันต้องการสร้างคือ:

$ echo /usr/include/c++/4.7.2/armv7l-unknown-linux-gnueabihf/bits/c++config.h >> ../../blah/foo/bar/CMakeLists.txt

มันจะดีถ้าฉันสามารถเลื่อนผ่านการโต้ตอบเพื่อค้นหาเส้นทาง CMakeLists.txt ในขณะที่ออกจากส่วน ... / c ++ config.h ส่วนไม่มีการแตะต้อง

ความเป็นไปได้อย่างหนึ่งคือการใช้ !! และ! -N ผู้ออกแบบเหตุการณ์ แต่ถ้าเป็นไปได้ เช่นลูกศรขึ้นและลง; หรือ CTRL + R

คำตอบ:


2

(ฉันจะใช้การตั้งชื่อคีย์ที่ใช้ในเอกสารประกอบของ Readline กล่าวคือรหัสการควบคุมนั้นแสดงโดย Cดังนั้น C-k คือ CTRL-K )

ค้นหาคนแรกด้วย C-rจากนั้น C-d หรือ Del 3 ครั้งเพื่อลบ ls. แล้วก็ C-k เพื่อฆ่า (ตัด) ส่วนที่เหลือของบรรทัด แล้วก็ C-r เพื่อค้นหาอีกอันหนึ่ง C-e เพื่อเลื่อนไปยังจุดสิ้นสุดของบรรทัด ชนิด >>. แล้วก็ C-y เพื่อดึง (วาง) ในเส้นทางแรก

ดังนั้น, C-k (ฆ่า) และ C-y (งัด) อาจเป็นเครื่องมือที่ดีที่สุดของคุณสำหรับงานนี้


นี่มันเยี่ยมมาก: ฉันไม่รู้เกี่ยวกับกระชากและฆ่า
user74094

1

หากคุณคุ้นเคยกับ vi คุณสามารถตั้งค่า bash เป็นโหมด vi ด้วย set -o vi จากนั้นใช้คำสั่ง vi ปกติ

ตัวอย่างเช่นในกรณีของคุณ f.y$ เพื่อดึงเส้นทางในบรรทัดคำสั่งแรกจากนั้นไปที่บรรทัดถัดไปด้วย jพิมพ์ $p เพื่อต่อท้ายข้อความที่ถูกดึงไปไว้ที่ท้ายบรรทัดและทำความสะอาดบรรทัดด้วย 0cwecho<esc>f a>><esc>

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