ฉันจะจำคำสั่งประวัติที่เป็นตัวเลขเพื่อแก้ไขได้อย่างไร


17

ฉันมักค้นหาการเปลี่ยนแปลงด้วย history | grep 'string'

ฉันได้รับรายการคำสั่งในประวัติของฉันพร้อมด้วยหมายเลขบรรทัดประวัติ) เช่น

history | grep 'git'

  755  git status
 1535  git push origin master
 1570  git merge origin/one-146
 1667  git reset --hard origin/master

ตอนนี้ฉันสามารถจำและรันคำสั่งได้ในครั้งเดียว!nnnตัวอย่างเช่น:

!755
git status
# On branch master
nothing to commit, working directory clean

คำถามของฉันคือ: ฉันจะจำคำสั่งประวัติศาสตร์ที่มีหมายเลขและอยู่ในบรรทัดคำสั่งสำหรับการแก้ไขและไม่ดำเนินการทันที 'ตามที่เป็น' วิธีที่!ทำเพื่อให้ฉันสามารถเปลี่ยนสองสิ่งที่แสดงก่อนที่จะกลับมา?

คำตอบ:


12

ฉันได้นำวิธีการอื่นมาใช้ ![line-number]:p

สิ่งนี้พิมพ์คำสั่งและเพิ่มลงในประวัติ แต่ไม่ได้ดำเนินการจริง ฉันทำลูกศรขึ้นแล้วเปลี่ยนตามที่ต้องการ

ฉันรวมสิ่งนี้กับhgนามแฝง ( alias hg='history | grep ') เพื่อเรียกคืนคำสั่งประวัติตามข้อความบางส่วน

ตัวอย่าง:

$ hg checkout

17140   git checkout README.rdoc
17143   git checkout master
17201   git checkout README.rdoc
17204   git checkout master
17923   git checkout .bashrc
18151   git checkout v311

ฉันจะใช้นี้นอกเหนือไปctrl- r(ประวัติการค้นหาย้อนกลับ) เพราะบางครั้งฉันชอบที่จะดูรายการได้ทันทีจากความเป็นไปได้ทั้งหมดสำหรับสตริงที่กำหนดมากกว่าแค่การส่งออกเมื่อวันที่ 1 บรรทัดที่ctrl- rการแสดง หลังจากนั้นhg [string]ฉันก็จะทำ![line-number]search_stringตามที่hg checkoutแสดงด้านบน


8

หากคุณตั้งค่าhistverify ตัวเลือกเช่น

shopt -s histverify

จากนั้นการทดแทนประวัติทั้งหมดจะถูกนำมาใช้เพื่อแก้ไขแทนที่จะถูกดำเนินการทันที จากนั้นคุณจะต้องกดEnterสองครั้งแทนที่จะพิมพ์ครั้งเดียว!755เพื่อเรียกใช้งานคำสั่ง

history -sคุณสามารถผลักดันข้อความโดยพลการเข้าสู่รายการประวัติกับ รวมสิ่งนี้กับfc -nlเพื่อแสดงรายการประวัติเฉพาะ

history -s "$(fc -nl 755 755)"

จากนั้นกดUpเพื่อเรียกคืนรายการประวัติล่าสุด


6

คุณสามารถค้นหากลับผ่านทางประวัติศาสตร์โดยใช้+Ctrl Rหากรายการประวัติใช้เมาส์เป็นเวลานาน (ไม่ใช่แป้นพิมพ์นั่นจะเป็นการหยุดการค้นหา) เพื่อคัดลอกและวางส่วนหนึ่งของคำสั่งเพื่อแก้ไขกลับเข้าไปใหม่

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


2
แป้นลูกศรหรือคำสั่งเทียบเท่า ( Ctrl-aตัวอย่าง) จะหยุดการค้นหาที่ออกจากรายการประวัติปัจจุบันในพรอมต์คำสั่งโดยไม่ต้องดำเนินการ สิ่งนี้อาจหรือไม่เพียงพอขึ้นอยู่กับสิ่งที่ @Michael ต้องการ
njsg

2

หากคุณกำหนดค่าไฟล์. bashrc ของคุณให้ใช้ตัวแก้ไข vi ที่บรรทัดคำสั่งจะทำให้การแก้ไขบรรทัดคำสั่งซับซ้อนน้อยลง

อันดับที่ 1 เมื่อเปิดใช้งาน"set -o vi"คุณสามารถกด"<esc> k"จากนั้นกดปุ่ม"k" ค้างไว้เพื่อเพิ่มไฟล์ประวัติเช่นเดิมหากคุณผ่านรายการให้ใช้"j" ที่จะไปลง

หมายเหตุ: เมื่อใช้ vi มีสองโหมด: คำสั่งและแก้ไขเพื่อเข้าสู่โหมดคำสั่งกดปุ่ม ESCAPE ครั้งเดียวแล้ว a, i, i, I ฯลฯ เพื่อแทรก

เคอร์เซอร์แบบง่ายใน vi: left = h, down = j, up = k, right = l http://linuxmeister.net/vi/vi-Summary.jpg

ฉันได้เพิ่มรายการทั้งหมดที่จำเป็นในการทำให้งานนี้ได้ที่: http://linuxmeister.net/Notes/bashrc-simple.html

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

ถ้า shopt อยู่ในรายการและ histverify เป็น "off" a! จะดำเนินการทันที

หากคุณเพิ่มใน. bashrc ของคุณหรือพิมพ์แล้ว: shopt -s histverifyดังนั้น a! อนุญาตให้แก้ไขตัวอย่างเช่น:

history
    1  more .bashrc
    2  history
    3  shopt
    4  . ./.bashrc
    5  shopt | grep hist
    6  history
    7  alias
    8  history
    9  shopt
   10  history

->! 5

เมื่อฉันกด! 5 คำสั่งต่อไปนี้จะปรากฏขึ้น แต่ไม่ทำงาน

### หาก histverify คือ "เปิด"

shopt | grep hist
cmdhist         on
histappend      on
histreedit      off
histverify      on
lithist         off

โปรดจำไว้ว่า Linus และ Richard สร้างเครื่องมือ Linux และ GNU เพื่อใช้ประโยชน์จาก UNIX เครื่องมือแก้ไข vi (สร้างโดย Bill Joy) เป็นหนึ่งในเครื่องมือที่ดีที่สุดที่จะเชี่ยวชาญในการกระจาย UNIX และ Linux

ตัวแก้ไขบรรทัดคำสั่งอื่นทั้งหมดต้องโหลดและต้องการซอฟต์แวร์เพิ่มเติม การใช้ GUI ใน Linux (นอกเหนือจาก Firefox, Thunderbird และ OpenOffice) นั้นเหมือนกับการดึง Diesel 4x4 ของคุณด้วย Beetle VW 1968 ... มันจะใช้งานได้ แต่มันก็ไม่สมเหตุสมผล

จำสิ่งที่ Kernigan พูดเกี่ยวกับ GUI "สิ่งที่คุณเห็นคือสิ่งที่คุณได้รับ"


-1
echo !number

จากนั้นกดลูกศรขึ้นนำคำออกechoแล้วแก้ไขส่วนที่เหลือ กด Enter เพื่อดำเนินการ

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