คำถามติดแท็ก readline

GNU Readline เป็นไลบรารีที่ให้การแก้ไขบรรทัดคำสั่งและความสามารถในการค้นหาประวัติสำหรับ Bash และโปรแกรมบรรทัดคำสั่งแบบโต้ตอบอื่น ๆ ใช้แท็กนี้สำหรับคำถามเกี่ยวกับการใช้ฟังก์ชัน Readline ใน Bash และซอฟต์แวร์อื่น ๆ

2
วิธีการยกเลิกการตรึงหลังจากกด Ctrl-S ในเทอร์มินัลโดยไม่ตั้งใจ
มันเป็นสถานการณ์ที่เกิดขึ้นกับฉันบ่อยมาก: หลังจากฉันกด (ด้วยความตั้งใจที่แตกต่าง) Ctrl-Sในเทอร์มินัลการโต้ตอบ (อินพุตหรือเอาต์พุต) กับมันจะหยุดลง อาจเป็น "ล็อคการเลื่อน" หรืออะไรก็ตาม ฉันจะยกเลิกการตรึงเทอร์มินัลหลังจากนี้ได้อย่างไร (เวลานี้ฉันทำงานกับapt-shellข้างbashในurxvt- ไม่แน่ใจว่าอันไหนของพวกเขาที่รับผิดชอบการจัดการพิเศษCtrl-S: ฉันกำลังค้นหาประวัติของคำสั่งย้อนหลังด้วยC-rเหมือนปกติสำหรับ readline แต่แล้วฉันก็อยากกลับไป " "ส่งต่อผ่านประวัติโดยปกติ - อย่างน้อยใน Emacs - C-s( 1 , 2 , 3 ) แต่นั่นทำให้เทอร์มินัลหยุดการทำงานดีการเลื่อน / เพจจิ้งเพื่อดูสิ่งที่ผ่านมายังคงใช้งานได้ในเทอร์มินัล กับกระบวนการทำงานที่นั่น)

2
มีวิธีใดบ้างที่จะเปิดใช้งาน Ctrl + L เพื่อล้างหน้าจอเมื่อตั้งค่า 'set -o vi' หรือไม่
เมื่อคุณกดCtrl+ Lในโหมดทุบตีเริ่มต้นหน้าจอจะถูกล้าง แต่เมื่อฉันเรียกใช้set -o viและกดCtrl+ Lการกดแป้นพิมพ์จะถูกพิมพ์ ( ^L) มีวิธีใดบ้างที่จะรักษาพฤติกรรมนี้
54 bash  readline  vi-mode 

4
ฉันจะค้นหารายการรหัสเทอร์มินัลคีย์เพื่อทำการแมปทางลัดใน bash ได้ที่ไหน
ตัวอย่างเช่น: "\e[1;5C" "\e[Z" "\e-1\C-i" ฉันรู้เพียงเศษ ๆ ชิ้น ๆ เช่น\eย่อมาจาก Escape และC-for Ctrlแต่ตัวเลขเหล่านี้ ( 1) และตัวอักษร ( Z) คืออะไร อะไรคือ;, [และ-ป้ายบอก? มีเพียงการทดลองและข้อผิดพลาดหรือมีรายการรหัสทุบตีที่สมบูรณ์และคำอธิบายของไวยากรณ์หรือไม่

1
ดำเนินการฟังก์ชั่น readline โดยไม่ต้องผูกปุ่ม?
ฉันแค่อ่าน readline man-page และค้นพบคำสั่งมากมายที่ฉันไม่รู้ อย่างไรก็ตามหลายคนไม่มีการเชื่อมโยงคีย์เริ่มต้น มีวิธีรันคำสั่ง unbound จากเชลล์หรือไม่? ฉันไม่ได้ถามว่าจะผูกคำสั่งใน ~ / .inputrc ได้อย่างไร แต่จะรันมันเป็น "one off" จาก shell หรือใน bash script ได้ ตัวอย่างเช่นคำสั่ง "dump-variables" มีคำสั่งที่ฉันสามารถฟีด "ตัวแปรตัวแปร" เพื่อเป็นอาร์กิวเมนต์เพื่อให้ได้ดำเนินการ?
26 bash  shell  readline  inputrc 

9
วิธีการพิมพ์พารามิเตอร์ใน bash console ซ้ำในปัจจุบัน?
ฉันแค่พิมพ์บางอย่างตามแนวของ: mv foo/bar/poit/zoid/narf.txt และทันใดนั้นเองฉันก็ต้องพิมพ์พารามิเตอร์ส่วนใหญ่อีกครั้ง mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt ถึงแม้จะมี tabcompletion แต่ก็ค่อนข้างเจ็บปวด ฉันรู้ว่าฉันสามารถคัดลอกวางพารามิเตอร์โดยการเลือกข้อความและคลิกกลาง แต่ไม่ดีพอ ฉันต้องการที่จะอยู่บนแป้นพิมพ์ ดังนั้นมีวิธีการคัดลอกวางพารามิเตอร์ปัจจุบันของบรรทัดโดยใช้แป้นพิมพ์หรือไม่

3
Ctrl-a ไม่ได้พาฉันไปที่จุดเริ่มต้นของพรอมต์ขณะที่ฉันทำงานภายในหน้าจอ GNU
เพื่อนำทางไปยังจุดเริ่มต้นและจุดสิ้นสุดของคำสั่งที่ผมมักจะใช้และCtrlaCtrle อย่างไรก็ตามเมื่อฉันทำงานภายในหน้าจอ GNU การเชื่อมโยงคีย์เหล่านั้นไม่ทำงานเพราะบางทีหน้าจอ GNU อาจถูกใช้งาน มีวิธีอื่นในการย้ายไปยังการเริ่มต้นหรือสิ้นสุดคำสั่งหรือไม่ ฉันอยู่บน CentOS6.2

1
รูปแบบทั่วไปของชื่อคีย์สำหรับการผูกคีย์ในไฟล์“ inputrc” คืออะไร?
ฉันเข้าใจว่ารูปแบบสำหรับการเชื่อมโยงคีย์ในinputrcไฟล์คือ: keyname: function-name or macro สำหรับชื่อคีย์ฉันเห็นสิ่งต่าง ๆ เช่น: "\e[B" "\e[1~" "\e[5D" "\M-l" "\C-[OD" "\e\e[D" ความหมายของชื่อคีย์เหล่านี้คืออะไรและรูปแบบทั่วไปของชื่อคีย์คืออะไร โปรดแบ่งปันลิงก์ไปยังเอกสาร
17 bash  readline 

2
Alt-Left เพื่อข้ามคำไม่ทำงานในเทอร์มินัลอีมูเลเตอร์
บนเครื่อง Debian Wheezy ที่งานก่อนหน้านี้ฉันคุ้นเคยกับ Alt + Left และ Alt + Right เพื่อข้ามระหว่างคำในบรรทัดคำสั่งที่ใช้งานอยู่ (เป็นทุบตี) แต่เนื่องจากที่บ้านผมได้อัพเกรดไปเจสซี่ (Debian 8.0 การทดสอบสาขา) นี้ไม่ได้ทำงานอีกต่อไป: แทนการกระโดดข้ามกับคำพูดก่อนหน้า Alt-ซ้ายพิมพ์สิ่งที่ต้องการหรือD [DOTOH ถ้าฉันเปิด ssh และเชื่อมต่อกับ Debian Wheezy ที่ไม่มีหัวของฉันมันจะทำงานได้อย่างสมบูรณ์แบบ นอกจากนี้ฉันเพิ่งติดตั้ง Fedora 20 ในงานใหม่ของฉันและที่นี่มีพฤติกรรมเหมือนกัน สิ่งนี้ใช้กับ bash, csh และ ksh (เริ่มต้นภายใต้env -i), เช่นเดียวกับ rxvt-unicode และ xfce4-terminal ดังนั้นมันจะต้องเป็นสิ่งที่อยู่นอกระดับเหล่านี้ ฉันควรมองหาความแตกต่างที่ไหน

4
ฉันจะเปลี่ยนเป็นโหมดแก้ไข vi ใน readline ได้อย่างไร
ฉันต้องการเปลี่ยนเป็นโหมดแก้ไข vi ในระบบ readline แต่ฉันไม่ต้องการใช้ 'set -o vi' ฉันต้องการสลับโดยใช้แป้นพิมพ์ลัดชั่วคราว M-C-jหน้าคนพูดว่าฉันสามารถทำเช่นนี้กับ แต่นั่นไม่ได้ผลสำหรับฉัน ฉันใช้ Ubuntu และ xterm ไม่สามารถทำงานภายใต้ gnome-terminal ได้เช่นกัน
16 bash  readline 

3
กำหนดค่าลูกศรขึ้นเพื่อเรียกดูคำสั่งที่มีอักขระเริ่มต้นเหมือนกันแทนที่จะเป็นคำสั่งก่อนหน้าทั้งหมด
ในbashบรรทัดคำสั่ง↑ให้ฉันคำสั่งก่อนหน้า ในคำสั่งบรรทัดในnumpyหรือmatlabเมื่อฉันพิมพ์ตัวอักษรไม่กี่ทำให้ผมมีคำสั่งก่อนหน้านี้ที่เริ่มต้นด้วยตัวอักษรเหล่านั้น↑ ฉันจะเปิดใช้งานลักษณะการทำงานนี้ได้bashอย่างไร ฉันทราบวิธีการค้นหาขั้นสูงเพิ่มเติมผ่านประวัติบรรทัดคำสั่ง แต่บางครั้งวิธีที่ง่ายกว่าก็สะดวกกว่า
15 bash  readline 

3
ไฟล์ ~ / .inputrc ไม่ได้รับการจัดหาอย่างถูกต้อง
ฉันมีไฟล์ ~ / .inputrc ที่ฉันสร้างขึ้นสำหรับการเชื่อมโยงคีย์บางอย่าง # mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving "\e[1;5C":forward-word "\e[1;5D":backward-word "\e[5C":forward-word "\e[5D":backward-word "\e\e[C":forward-word "\e\e[D":backward-word เมื่อใดก็ตามที่ฉันพยายามเรียกใช้source ~/.inputrcมันทำให้ฉันมีข้อผิดพลาดต่อไปนี้: \ e [1; 5C: ไปข้างหน้าคำ: ไม่พบคำสั่ง \ e [1; 5D: คำย้อนหลัง: ไม่พบคำสั่ง \ e [5C: ไปข้างหน้าคำ: ไม่พบคำสั่ง \ e [5D: ย้อนหลังคำ: ไม่พบคำสั่ง \ e \ e [C: ไปข้างหน้าคำ: …
14 bash  tcsh  readline 

2
ทางลัดเดียวเพื่อส่งต่อการค้นหาหลังจากค้นหา Ctrl-R ย้อนกลับ
ฉันใช้Ctrl+ Rตลอดเวลา แต่บ่อยครั้งที่ฉันต้องผ่านคำสั่งที่ฉันตามมาเพราะฉันกดมันเร็วเกินไป เพื่อส่งต่อการค้นหาCtrl+ Sสามารถใช้บริการที่มีให้ก็ไม่ได้ใช้สถานีแรก (konsole ในกรณีของฉันซึ่งstty -ixonใน~/.bashrcการแก้ไขได้) อย่างไรก็ตามฉันต้องกดสองครั้ง: เมื่อดูเหมือนว่าจะเข้ามาi-searchหลังจากอยู่ในreverse-i-searchโหมดและครั้งที่สองที่จะย้อนกลับจริง ๆ มีวิธีลบความจำเป็นในการกดปุ่มลัดสองครั้งหรือไม่?

2
วิธีแสดงอักขระควบคุม (^ C, ^ D, ^ [, …) ในเชลล์แตกต่างกัน
เมื่อคุณพิมพ์อักขระควบคุมในเชลล์พวกมันจะปรากฏขึ้นโดยใช้สิ่งที่เรียกว่า "เครื่องหมายรูปสัณฐานวิทยา" หลบหนีเช่นได้รับการเขียน^[ในรูปสัญกรณ์ ฉันชอบปรับแต่ง bash shell ของฉันเพื่อทำให้มันดูเท่ห์ ตัวอย่างเช่นฉันเปลี่ยนของฉันPS1และPS2กลายเป็นสี ตอนนี้ฉันต้องการให้ตัวควบคุมมีลักษณะที่ไม่เหมือนใครและทำให้พวกมันแตกต่างจากตัวละครปกติมากขึ้น $ # Here I type CTRL-C to abort the command. $ blahblah^C ^^ I want these two characters to be displayed differently มีวิธีที่ทำให้ตัวควบคุมไฮไลท์เปลือกของฉันแตกต่างไปจากนี้หรือไม่ เป็นไปได้หรือไม่ที่จะทำให้มันแสดงเป็นตัวหนาหรืออาจทำให้มันปรากฏเป็นสีต่าง ๆ จากข้อความปกติ? ฉันกำลังใช้bash shell ที่นี่ แต่ฉันไม่ได้ติดแท็กคำถามด้วยbashเพราะอาจมีวิธีแก้ปัญหาที่ใช้กับเชลล์ที่แตกต่างกันจำนวนมาก โปรดทราบว่าฉันไม่ทราบว่าจะเน้นการควบคุมอักขระที่ระดับใด ฉันแรกคิดว่ามันอยู่ในเปลือกตัวเอง ตอนนี้ผมเคยได้ยินว่ามันเป็นที่ ReadLineว่าการควบคุมวิธีการควบคุมตัวอักษรที่อยู่ในเปลือกหอยเช่นทุบตี ดังนั้นตอนนี้คำถามจะถูกแท็กด้วยreadlineและฉันยังคงมองหาคำตอบ

1
ลบอาร์กิวเมนต์ทั้งหมดในบรรทัดคำสั่ง bash ปัจจุบัน
การใช้^W(unix-word-rubout) ฉันสามารถลบ "word" เดียวจากคำสั่งปัจจุบันใน bash shell ของฉันได้อย่างง่ายดาย อย่างไรก็ตามเมื่อจัดการกับข้อโต้แย้งที่ยกมาที่มีช่องว่าง (หรือข้อโต้แย้งที่ไม่มีเครื่องหมายอัญประกาศที่มีช่องว่างที่หลบหนีแบ็กสแลช) นี้ไม่ได้ทำงานได้ดีเพราะมันจะลบเพียงหนึ่งคำและไม่ใช่อาร์กิวเมนต์ทั้งหมด ดังนั้นฉันกำลังมองหาวิธีลบอาร์กิวเมนต์ทั้งหมด ตัวอย่าง (เคอร์เซอร์อยู่ที่ท้ายเสมอ): $ foo --bar "foo bar" meow [black magic] $ foo --bar "foo bar" [black magic] $ foo --bar [black magic] $ foo
13 bash  readline  inputrc 

2
จะเลิกทำการเปลี่ยนแปลงใน command-history ได้อย่างไร?
ในระบบ UNIX คุณสามารถกดลูกศรบนและล่างเพื่อเลื่อนดูคำสั่งก่อนหน้า มันมีประโยชน์มาก บางครั้งฉันก็ขึ้นไปและพบคำสั่งที่ฉันต้องการใช้อีกครั้ง แต่มีรูปแบบบางอย่าง historyถ้าฉันจะเปลี่ยนแปลงดังกล่าวแล้วผมไม่ได้มีวิธีการที่จะได้รับกลับคำสั่งเดิมจนกว่าฉันตรวจสอบใน มีวิธีใดบ้างที่จะ "เลิกทำ" การเปลี่ยนแปลงคำสั่งในประวัติการเข้าใช้ผ่านทางคีย์? วิธีแก้ปัญหาปัจจุบันของฉันคือการผนวก#คำสั่ง วิธีนี้ดำเนินการคำสั่งปัจจุบันเป็นความคิดเห็นจึงไม่มีอะไรเกิดขึ้น จากนั้นฉันสามารถเรียกดูอีกครั้งผ่านคำสั่งด้วยปุ่มต่างๆ ปัญหาคือว่าคำสั่งที่ฉันใช้อาจจะเป็นรายการที่อยู่ห่างไกลในรายการดังนั้นการขึ้นอีกสองร้อยครั้งนั้นค่อนข้างน้อย Control + R ไม่ใช่วิธีแก้ปัญหาอย่างใดอย่างหนึ่งเนื่องจากฉันอาจจำไม่ได้ว่าสิ่งที่ฉันกำลังมองหา ตัวอย่าง ฉันพิมพ์ "50 คำสั่งที่ผ่านมา" ต่อไปนี้: ls -l /etc/httpd/conf/ ตอนนี้ฉันขึ้นไปที่บรรทัดนั้นและเปลี่ยนเป็น ls -l /etc/init.d/ แต่ไม่ได้กด Enter ตอนนี้ฉันต้องการไปที่ls -l /etc/httpd/conf/อีกครั้ง สภาพแวดล้อมของฉัน $ echo $SHELL /bin/bash $ echo $TERM xterm

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