บังคับให้แท็บปกติเสร็จสิ้นหากการทำให้เสร็จสมบูรณ์แบบอัจฉริยะล้มเหลว


10

เมื่อแท็บเสร็จสมบูรณ์กลายเป็นคุณสมบัติมาตรฐานในเชลล์ฉันมีความสุขมากที่ได้ใช้มัน ฉันยังชอบความสมบูรณ์แบบอัจฉริยะของ Bash (ซึ่งจะค้นหาเฉพาะไฟล์ PDF เท่านั้นหากฉันพิมพ์ evoo foo <TAB>) - ตราบใดที่เดาได้อย่างถูกต้อง

ซากปรักหักพังเป็นวันที่มีความสุขเป็นอย่างยิ่งเมื่อ Bash ใช้ความสำเร็จที่ชาญฉลาดในการปฏิเสธการทำสิ่งนั้นให้สำเร็จ

วันนี้ฉันต้องการ:

tar xvf centos5.8_x86_1.ova

ดังนั้นฉันเข้ามา:

tar xvf cent<TAB>

และ Bash ปฏิเสธที่จะทำตามเส้นทางให้เสร็จสิ้นเพราะ. Nova-files ไม่ใช่สิ่งที่คุณมักใช้กับ tar

ฉันรู้ว่าฉันสามารถถอนการติดตั้งแพคเกจ bash-completion เพื่อลบความสมบูรณ์อัจฉริยะ แต่ฉันมีเค้กและกินมันด้วยได้ไหม

ฉันขอให้ทุบตีใช้ความสมบูรณ์แบบอัจฉริยะก่อนหรือไม่


1
<สแปม> Zsh สามารถทำได้ </spam>
Gilles 'SO - หยุดความชั่วร้าย'

คำตอบ:


9

ต่อไปนี้ควรเปิดใช้งานการเติมเต็มของการทุบตีตามปกติหลังจากความสำเร็จ 'อัจฉริยะ' ทั้งหมดล้มเหลวสำหรับโปรแกรม tar, vim และ emacs:

compopt -o bashdefault tar vim emacs

ดูหน้าเว็บที่เกี่ยวข้องในคู่มือทุบตีออนไลน์

ข้อแม้: คุณได้รับพฤติกรรมปกติสำหรับประเภทของงานที่ทำเสร็จ (คำสั่ง / ชื่อไฟล์ / ชื่อผู้ใช้อื่น ๆ ) ที่กำหนดโดยเสร็จสิ้นการที่ชาญฉลาดสำหรับคำสั่งที่อยู่ในมือเช่นเสร็จสิ้นเพื่อจะชื่อไฟล์ที่ยังไม่สมบูรณ์แม้ว่าคุณจะเรียกservicecomplete -o bashdefault service

ในเรื่องนี้และกรณีอื่น ๆ ที่เติมข้อความอัตโนมัติอัจฉริยะล้มเหลวคุณสามารถเสมอกดAlt-/(หรือM-/ในคูทุบตีของ) เพื่อที่สมบูรณ์ชื่อไฟล์เกือบจะอยู่ในลักษณะเดียวกับที่ TAB ทำงานหากเสร็จสิ้นฉลาดเป็นคนพิการ (เกือบทางเดียวกันในแง่ที่ว่าM-/ไม่ รูปแบบที่สมบูรณ์เช่น*.txt) ดูที่นี่สำหรับลำดับที่สำคัญสำหรับความสำเร็จประเภทอื่นเช่นคำสั่งและชื่อผู้ใช้


2
ขอบคุณสำหรับ Alt- / พูดถึงฉันไม่มีความคิดที่อยู่ในนั้น
Michael Speer

1

bash completetion เป็นส่วนเสริมของความสำเร็จมาตรฐานของ bash และเป็นโปรแกรม bash ดังนั้นหากคุณต้องการเปลี่ยนวิธีการทำงานของโปรแกรมเพียงแค่เปลี่ยนมัน นี่เป็นซอฟต์แวร์ฟรีคุณมีอิสระที่จะทำ สำหรับกรณีเฉพาะของคำสั่งของไฟล์นั้นtar /usr/share/bash-completion/completions/tarสำหรับtarการเติมข้อความอัตโนมัติให้กับไฟล์ที่มีนามสกุลovaเพียงแค่เพิ่มลงในบรรทัด

local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

ดังนั้นมันจึงบอกว่า

local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

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

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


4
การแก้ไขไฟล์ใน / usr ที่เป็นของตัวจัดการแพกเกจเป็นวิธีที่ดีในการทำให้เกิดการอัปเกรดที่น่ารังเกียจ ดีกว่า: แทนที่การกำหนดค่าแพคเกจ
Chris Down

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