วิธีการจำคำสั่งก่อนหน้า (โดยไม่มีการดำเนินการ) เพื่อเปลี่ยนคำสั่ง?


14

ฉันจำเคล็ดลับที่ฉันไม่สามารถเรียกใช้คำสั่งล่าสุดโดยไม่เรียกใช้:

สมมติว่าฉันต้องการที่จะสามารถเข้าถึงคำสั่งได้! 1255 เมื่อกดปุ่มลูกศรขึ้นและแก้ไขคำสั่ง ดังนั้นเคล็ดลับในการเรียกคำสั่งทำให้มันปรากฏขึ้นในบรรทัดคำสั่ง แต่ไม่ได้ดำเนินการและหลังจากนั้นสามารถเข้าถึงได้ผ่านทางปุ่มลูกศรขึ้น?

ฉันพยายามใส่เสียงก้อง แต่จากนั้นฉันก็มีเสียงก้องต่อคำสั่งฉันจำไม่ได้ว่าทำอย่างถูกต้อง


4
หากฉันเข้าใจคำขอของคุณอย่างถูกต้องอาจลองใช้คำต่อท้ายเป็น ": p" ดังใน "! 1255: p"
Theophrastus

@Theophrastus ใช่แล้วฉันลืมไปแล้ว: p ส่วนหนึ่งและดูเหมือนจะไม่ได้รับคำหลักที่เหมาะสมใน google เพื่อค้นหา ... ขอบคุณพวก
Arturas M

คำตอบ:


21
!1255:p

จะทำเช่นนี้

!การเรียกคืนประวัติ
1255คือการ
:pพิมพ์หมายเลขบรรทัดแต่ไม่ได้ดำเนินการ

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

ฉันมักจะรวมสิ่งนี้กับhg("Grep ประวัติศาสตร์") - นามแฝงที่ชื่นชอบ

$ alias hg  # Maybe use hgr instead if you are a Mercurial CLI user.
alias hg='history | tail -200 | grep -i'

การค้นหาข้อความในบรรทัดประวัติล่าสุดไม่ว่าจะเป็นกรณีใดและใช้วิธีนี้:

เมื่อฉันต้องการค้นหาคำสั่ง vi ล่าสุดเพื่อแก้ไขไฟล์บางไฟล์จากนั้นฉันต้องการใช้หนึ่งในนั้นเพื่อแก้ไขไฟล์เดียวกัน แต่ใช้นามสกุลไฟล์อื่น

$ hg variables
 6153  vi Variables/user-extensions.js 
 6176  vi Variables/user-extensions.js 
 6178  vi Variables/user-extensions.js 
 6190  vi Variables/user-extensions.js 
 6230  hg variables
$ # Notice the difference in case with V and v is ignored
$ !6190:p
vi Variables/user-extensions.js 
$ ["up-arrow"]
$ vi Variables/user-extensions.[now change .js to .html]

ฉันยังกำหนด hga ("ประวัติ Grep All") เพื่อค้นหาประวัติทั้งหมดของฉัน:

$ alias hga
alias hga='history | grep -i'

แต่ฉันไม่ได้ใช้มันมากนักเพราะประวัติของฉันมีขนาดใหญ่มาก (โดยเจตนา) และฉันได้รับผลลัพธ์มากเกินไปซึ่งในภายหลังจะมีผลต่อการเลื่อนผ่านหน้าเว็บในเทอร์มินัลของฉัน


2
โปรดทราบว่าhgยังเป็นCLI ของ Mercurial
usandfriends

1
ทราบดี เพิ่มเพื่อตอบ
Michael Durrant

12

Hitting Ctrl+ R(ซึ่งเป็นการเชื่อมโยงคีย์การค้นหาย้อนกลับที่เพิ่มขึ้นของ emacs เป็น @gnp ที่เคลื่อนไหวในความคิดเห็น) ในเทอร์มินัลช่วยให้คุณสามารถค้นหาในฮิสทรีสำหรับคำสั่งเฉพาะ คำสั่งจะปรากฏขึ้นและสามารถแก้ไขได้ก่อนดำเนินการ คุณจะเห็นสิ่งนี้:

ป้อนคำอธิบายรูปภาพที่นี่

แหล่ง


1
ขอบคุณ! ไม่ใช่คำตอบที่ตรงกับคำถามของฉันจริงๆ แต่ฉันไม่รู้สิ่งนี้และฉันคิดว่ามันมีประโยชน์จริงๆ ขอบคุณมาก!
Arturas M

1
นอกจากนี้ที่น่าสังเกตก็คือ Ctrl + R เป็นการค้นหาย้อนกลับที่เพิ่มขึ้นของ emacs ปุ่มลัด emacs จำนวนมากทำงานร่วมกับเครื่องมือ GNU มากมาย: Ctrl + A, Ctrl + E, Ctrl + K, Ctrl + Y และอื่น ๆ
GnP

@gnp ขอบคุณสำหรับข้อมูลที่ฉันไม่ทราบ
Hamza Abbad

เอาฉันมานานเพื่อความสะดวกสบายกับ ctrl-r หลังจากเรียนรู้สองสิ่งที่สำคัญ 1. ละเว้นเอาต์พุตขณะที่คุณกำลังพิมพ์ 2. ตรวจสอบให้แน่ใจว่าคุณพิมพ์พอสำหรับคำสั่งที่คุณต้องการโดยเฉพาะ
Michael Durrant

7

fcคำสั่งไม่สิ่งที่คุณต้องการ

fc -l <number> จะแสดงรายการประวัติคำสั่งรอบหมายเลขนั้น

fc <number>จะเปิดรายการบรรทัดคำสั่งนั้นในvim(หรือสิ่งที่ฉันคาดว่าจะแก้ไขตามค่าเริ่มต้นของคุณ) เพื่อให้คุณสามารถแก้ไขได้และ:wqคุณจะสามารถใช้ลูกศรขึ้นได้


7

ใน bash Ctl+alt+eทำการขยายตัวของเชลล์ดังนั้นการพิมพ์!1255แล้วกดชุดนี้จะแทนที่บรรทัดปัจจุบันด้วยเนื้อหาของรายการประวัติ 1255


ไม่ได้ทำเพื่อฉันบน Ubuntu
Michael Durrant

@MichaelDurrant ฉันเพิ่งลองในวันที่ 14.04 (kubuntu) และมันใช้งานได้สำหรับฉัน มันถูกบันทึกไว้ในฐานะman bash shell-expand-lineอาจจะมีชุดช็อตคัทสำหรับ gnome-terminal
adonis

@adonis ฉันไม่เคยรู้จักคนนี้เลยขอบคุณมากจริง ๆ แล้วมันก็ทำในสิ่งที่ฉันขอเช่นกัน และแน่นอนฉันสามารถค้นหาการใช้งานเพิ่มเติมจากฟังก์ชันนี้ ! น่ากลัว ขอบคุณ!
Arturas M

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