การลบอินพุตกลับไปที่เครื่องหมายสแลชสุดท้าย


16

ฉันมักจะถูกโยนระหว่างหลายไฟล์บนเซิร์ฟเวอร์ ฉันจะเรียกใช้คำสั่งตัวอย่างต่อไปนี้ตามลำดับ:

nano /web/site/path/to/file
/web/site/script.py
nano /web/site/path/to/anotherFile
nano /web/site/path/to/yetAnotherFile
/web/site/script.py
nano /web/site/path/to/etc

เพื่อไปจากnanoคำสั่งหนึ่งไปยังอีกฉันกำลังกดUpและBackspaceเพื่อแทนที่ส่วนสุดท้ายของเส้นทาง ปัญหานี้คือฉันขี้เกียจจริงๆ

มีแป้นพิมพ์ลัด (หรือ Bashism) ที่สามารถ:

  • รับแทนที่ด้วยพา ธ สุดท้ายที่ใช้ (ด้วยบิตพิเศษที่ส่วนท้าย)
  • ลบในบรรทัดปัจจุบัน (เช่นหลังจากกดUp) กลับไปเป็นครั้งสุดท้าย/

1
ฉันไม่แน่ใจว่าคุณหมายถึงอะไร แต่ฉันคิดว่าในส่วนแรกคุณสามารถใช้alt+ .?
Sparhawk

@Sparhawk Alt + .จะใช้สำหรับการอย่างอื่น
Radu Rădeanu

@ RaduRădeanuใช่บางทีฉันอาจเข้าใจผิดคำถาม ฉันคิดว่า "รับการแทนที่ด้วยเส้นทางสุดท้ายที่ใช้ (พร้อมบิตเพิ่มในตอนท้าย)" หมายถึงสิ่งที่alt+ .ทำ
Sparhawk

@Sparhawk อีกครั้งหนึ่งในช็อตคัทที่มีประโยชน์จริง ๆ เกี่ยวกับเดือนละครั้งซึ่งฉันดูเหมือนจะไม่สามารถจดจำความทรงจำได้ เมื่อรวมกับ alt-backspace มันค่อนข้างมีประโยชน์สำหรับการเรียกใช้ไฟล์ที่คล้ายกันผ่านคำสั่งต่าง ๆ
Oli

@Oli ฉันมักจะใช้มันค่อนข้างยุติธรรม แต่ฉันมักจะลืมวิธีการย้ายไปทางอื่น !
Sparhawk

คำตอบ:


21

ฉันคิดว่าคุณกำลังมองหาAlt+ Backspaceทางลัด

หลังจากกดปุ่มUpนี้ควรลบกลับไปก่อนหน้า/หรือspaceตัวละคร


7
ตอนนี้ฉันไม่สามารถหยุดได้! (แก้ไข: ฉันสาบานว่าฉันเรียนรู้และลืมทางลัดนี้อย่างน้อยสิบครั้งต่อปี)
Oli

3
สิ่งนี้ควรทำอย่างไร ใน terminal backspaceของฉันมันไม่ได้ดูเหมือนจะทำอะไรที่แตกต่างกันกว่าธรรมดา
Bakuriu

1
@Bakuriu ทางลัดนี้ควรเป็นค่าเริ่มต้น หากคุณต้องการทราบว่ามีการจับคู่สิ่งใดกับระบบของคุณbind -P | grep '^backward-kill-word'
Sylvain Pineau

1
@Bakuriu ที่นี่ฉันอยู่บน Mac
laike9m

9

เมื่อต้องการตรวจจับการโยง readline ที่ฆ่าคำย้อนหลังตามที่คุณต้องการคุณสามารถใช้คำสั่งต่อไปนี้ในเทอร์มินัลของคุณ:

bind -p | awk '/kill/ && /word/ && /backward/'

ในการติดตั้งเริ่มต้นของ Ubuntu ผลลัพธ์อาจเป็น:

"\e\C-h": backward-kill-word
# shell-backward-kill-word (not bound)

บรรทัดที่สองดูเหมือนจะไม่มีความสำคัญในจุดนี้ดังนั้นให้เราลองดูว่าบรรทัดแรกหมายถึงอะไร จากสิ่งที่ฉันเข้าใจbackward-kill-wordฟังก์ชั่นที่ ReadLine ซึ่งในความเป็นจริงลบตัวอักษรทั้งหมดจนกว่าตัวละครพิเศษก่อนหน้า ( /, ;, ,ฯลฯ ) ถูกผูกไว้กับ\e\C-hลำดับที่สำคัญ ขณะนี้ในลำดับนี้\e แสดงให้เห็นถึงEscสำคัญ\C- The Ctrlสำคัญและ\C-hยืนสำหรับCtrl+ hซึ่งเทียบเท่าในกรณีนี้ด้วยBackspaceที่สำคัญ

ดังนั้นคุณกำลังค้นหาEsc+ Ctrl+hแป้นพิมพ์ลัดซึ่งเทียบเท่ากับEsc+Backspaceและเนื่องจากพฤติกรรมของ xterm ที่ทำให้Altคีย์เพื่อทำหน้าที่เป็นอักขระเมตาและอักขระเมตาจะถูกแปลงเป็นลำดับสองอักขระโดยมีตัวอักขระนำหน้าด้วยEsc(ดูman xterm)เทียบเท่ากับ+AltBackspace

ทีนี้ถ้าคุณไม่ชอบมันและลืมไปเรื่อย ๆ คุณสามารถใช้คำสั่งต่อไปนี้เพื่อสร้างทางลัดใหม่ให้พูดEsc+ wเพื่อจุดประสงค์ของคุณ:

bind '"\ew": backward-kill-word'

ในการทำให้ทางลัดใหม่นี้คงอยู่ตลอดเวลาสำหรับคำสั่งทั้งหมดที่ใช้ readline ให้เพิ่มบรรทัดบรรทัดต่อไปนี้ใน~/.inputrcไฟล์ของคุณ:

"\ew": backward-kill-word

ดูhelp -m bind | sensible-pagerข้อมูลเพิ่มเติม


2
คำตอบที่ดี. โดยทั่วไปคุณจะต้องล้อมรอบการตั้งค่าทั้งหมดด้วยเครื่องหมายคำพูดเดี่ยวด้วยคำสั่ง bind bind '"\ew": backward-kill-word'แต่นั่นก็เป็นการสร้างแรงผลักดัน และก็อาจจะมีมูลค่าการกล่าวขวัญว่าคุณยังสามารถใส่"\ew": backward-kill-wordใน~/.inputrcซึ่งในกรณีนี้คำสั่งอื่น ๆ ที่ใช้ ReadLine ยังจะมีที่มีผลผูกพันเช่นถ้าคุณเปิดใช้งาน ReadLine ในเปลือกโต้ตอบหลามที่มีผลผูกพันจะใช้มี
geirha

@geirha ใช่ฉันรู้ว่าคุณพูดอะไร แต่ฉันคิดว่า OP รู้วิธีจัดการสิ่งนี้ อย่างไรก็ตามตอนนี้ฉันรู้แล้วว่าคำตอบของฉันไม่เป็นประโยชน์สำหรับ OP (เขาแค่ต้องการจดจำทางลัด) แต่ฉันหวังว่าจะเป็นประโยชน์สำหรับผู้ใช้รายอื่นในไซต์นี้และเพื่อแก้ไขคำตอบของฉันโดยเพิ่มการสังเกตของคุณ ขอขอบคุณ.
Radu Rădeanu

0

การผสมผสานที่สำคัญอีกประการหนึ่งคือ:

Alt+ Bแล้วCtrl+K

Alt + B     Move cursor backward one word on the current line    
Ctrl + K    Clear the line after the cursor

Alt+ Bแล้วAlt+D

สิ่งนี้จะลบคำสุดท้ายโดยไม่ลบอักขระพิเศษระหว่างคำ

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