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

คุณลักษณะที่จัดทำโดยโปรแกรมแบบโต้ตอบเช่นเชลล์และโปรแกรมแก้ไขข้อความที่แทรกข้อความเพื่อเติมคำหรือวลีที่ผู้ใช้มีแนวโน้มที่จะเขียน

2
ฉันจะกำหนดค่าให้เสร็จสมบูรณ์ zsh เพื่อแสดงไฟล์และโฟลเดอร์ที่ซ่อนอยู่ได้อย่างไร?
ขณะนี้เมื่อฉันขอให้เสร็จพฤติกรรมที่เป็นเช่นนี้: % cd ~/<TAB> Completing directory Desktop/ Downloads/ Pictures/ system/ Videos/ Documents/ Music/ Public/ Templates/ www/ ฉันจะกำหนดค่าความสมบูรณ์ให้กับรายการไฟล์ที่ซ่อนได้อย่างไร
11 zsh  autocomplete 

1
ฉันจะทำให้ฟังก์ชั่นเชลล์ของฉันใช้ประโยชน์จากการเติมข้อความอัตโนมัติที่มีอยู่ใน zsh ได้อย่างไร
ฉันมีฟังก์ชั่นเชลล์สองแบบที่กำหนดไว้ใน.zshrcบันทึกซึ่งพิมพ์และอนุญาตให้รวมกับหน้าจอ ตัวอย่างเช่น: function s() { screen -t "$1" ssh "$@" } อย่างไรก็ตามเมื่อฉันใช้ฟังก์ชั่นเชลล์เหล่านี้ฉันไม่สามารถใช้ประโยชน์จากคุณลักษณะการสร้างคำสั่งของ zsh ได้อย่างสมบูรณ์ (ในกรณีของ SSH ให้กรอกชื่อโฮสต์โดยอัตโนมัติตามที่รู้จักกันว่า host_hosts และ ssh_config) วิธีที่ต้องการในการเชื่อมโยงไปยังกลไกความสมบูรณ์ที่มีอยู่สำหรับคำสั่งที่ฉันสร้าง wrappers คืออะไร แก้ไข: ขอบคุณ Gilles สำหรับคำตอบของเขาด้านล่าง การใช้ compdef ดูเหมือนจะเป็นวิธีการทำเช่นนี้ แต่น่าสนใจว่ามันไม่ทำงานอย่างสม่ำเสมอ ในกรณีนี้ฉันมีการตั้งค่าต่อไปนี้: function s() { screen -t "$1" ssh "$@" } function m() { screen -t "man.$1" man "$1" } …
10 zsh  autocomplete 

2
บังคับให้แท็บปกติเสร็จสิ้นหากการทำให้เสร็จสมบูรณ์แบบอัจฉริยะล้มเหลว
เมื่อแท็บเสร็จสมบูรณ์กลายเป็นคุณสมบัติมาตรฐานในเชลล์ฉันมีความสุขมากที่ได้ใช้มัน ฉันยังชอบความสมบูรณ์แบบอัจฉริยะของ Bash (ซึ่งจะค้นหาเฉพาะไฟล์ PDF เท่านั้นหากฉันพิมพ์ evoo foo <TAB>) - ตราบใดที่เดาได้อย่างถูกต้อง ซากปรักหักพังเป็นวันที่มีความสุขเป็นอย่างยิ่งเมื่อ Bash ใช้ความสำเร็จที่ชาญฉลาดในการปฏิเสธการทำสิ่งนั้นให้สำเร็จ วันนี้ฉันต้องการ: tar xvf centos5.8_x86_1.ova ดังนั้นฉันเข้ามา: tar xvf cent<TAB> และ Bash ปฏิเสธที่จะทำตามเส้นทางให้เสร็จสิ้นเพราะ. Nova-files ไม่ใช่สิ่งที่คุณมักใช้กับ tar ฉันรู้ว่าฉันสามารถถอนการติดตั้งแพคเกจ bash-completion เพื่อลบความสมบูรณ์อัจฉริยะ แต่ฉันมีเค้กและกินมันด้วยได้ไหม ฉันขอให้ทุบตีใช้ความสมบูรณ์แบบอัจฉริยะก่อนหรือไม่

2
การเติมข้อความอัตโนมัติ Bash สำหรับตัวแปรสภาพแวดล้อมที่มีชื่อไดเรกทอรี
ฉันใช้สิ่งอื่น ๆ ทุบตี 4.2.37 บน Linux Mint 14 เมื่อฉันเติมข้อความอัตโนมัติให้กับชื่อของตัวแปรสภาพแวดล้อมโดยการพิมพ์Tabมันจะขยายเป็นชื่อของตัวแปรตามด้วยช่องว่าง /ถ้าค่าของตัวแปรที่จะเกิดขึ้นชื่อไดเรกทอรีที่ฉันต้องการที่จะขยายไปที่ชื่อของตัวแปรตาม ตัวอย่างเช่นถ้าฉันพิมพ์: $ ls $HOM<tab> มันขยายไปที่: $ ls $HOME _ โดย_ทำเครื่องหมายที่ตำแหน่งของเคอร์เซอร์ ปัญหาคือว่าฉันก็มักจะต้องการที่จะดำเนินการพิมพ์ชื่อของไฟล์บางส่วนหรือไดเรกทอรีภายใต้ไดเรกทอรีบ้านของฉันซึ่งหมายความว่าฉันต้องพิมพ์แล้วbackspace/ ดังนั้นฉันต้องการที่จะขยายไป: $ ls $HOME/_ สิ่งเดียวกันนี้เกิดขึ้นเมื่อฉันพิมพ์ชื่อตัวแปรทั้งหมด หลังจากls $HOME, เพิ่มช่องว่างและฉันต้องการที่จะเพิ่มtab/ (และแน่นอนฉันไม่ต้องการให้เพิ่ม/ถ้าค่าของตัวแปรไม่ใช่ชื่อไดเรกทอรี) มีวิธีการบางอย่างที่ฉันสามารถบอกทุบตีการปฏิบัติตนในแบบที่ฉันต้องการทั้งผ่านทางคำสั่งทุบตีหรือโดยการอัปเดตของฉัน$HOME/.inputrc? หมายเหตุ: ฉันกำลังมองหาวิธีที่จะทำให้tabพฤติกรรมในแบบที่ฉันต้องการโดยเฉพาะ วิธีในการบรรลุพฤติกรรมเดียวกันกับการกดแป้นแตกต่างกันจะน่าสนใจ แต่จะไม่ตอบคำถามของฉัน (ฉันปิดการใช้งาน/etc/profile.d/bash_completion.shในระบบของฉันเพราะมันมีปฏิสัมพันธ์ไม่ดีset -o nounsetการทดสอบอย่างรวดเร็วบ่งชี้ว่าสิ่งนี้อาจไม่เกี่ยวข้องกับคำถามของฉัน) อนึ่ง tcsh ทำสิ่งนี้: กำหนดตัวแปรสภาพแวดล้อมการ$FOOBARพิมพ์$FOOBA<tab>ขยายไปถึง$FOOBAR/ถ้ามันอ้างถึงไดเรกทอรี$FOOBAR(มีช่องว่าง) ถ้ามันไม่ได้ ไม่นั่นไม่เพียงพอที่จะชักชวนให้ฉันกลับไปที่ tcsh zsh ทำเช่นนี้เช่นกัน

1
zsh เสร็จสมบูรณ์: รับชื่อไฟล์จากไดเรกทอรีเฉพาะ
ตกลงพื้นหลังเล็กน้อย: ฉันใช้ Mac และทำเท่าที่จะทำได้ใน CLI โดยเฉพาะอย่างยิ่งฉันมักจะปรากฏในแท่ง USB cpหรือmvไฟล์บนแล้วต้องการออกทันที (ยกเลิกการต่อเชื่อมและยกเลิกการเชื่อมต่อ) โดยทั่วไปสามารถทำได้ด้วยการกดแป้นจำนวนหนึ่งยกเว้นการยกเลิกการต่อเชื่อมซึ่งต้องการ (ใน 10.7) ไปที่พื้นที่เดสก์ท็อปที่ว่างเปล่า ตรงไปตรงมาขั้นตอนการยกเลิกการเมานต์นี้เป็นไปตามคำสั่งหลายขนาดซึ่งเป็นส่วนที่ใช้เวลามากที่สุดและน่าเบื่อที่สุดของกระบวนการ มันจะเป็นธรรมชาติและมีประสิทธิภาพมากขึ้นที่จะพิมพ์พูด: ej<tab> J<tab> พูดว่าอุปกรณ์ USB ของฉันติดตั้งที่ / Volumes / Jefferson สิ่งที่ฉันคาดหวังที่จะได้รับจากการกดปุ่ม 6 ครั้งของฉันคือ: eject /Volumes/Jefferson สิ่งนี้ควรรันคำสั่ง: diskutil unmount /Volumes/Jefferson ดังนั้นฉันจึงเขียนฟังก์ชันเล็ก ๆ ที่ดี: eject() { diskutil unmount /Volumes/$1 } และฟังก์ชั่นเสร็จสมบูรณ์ที่จะไปกับมัน: compdef '_files -g "/Volumes/*"' eject อย่างไรก็ตามมีปัญหากับสิ่งนี้ _filesฟังก์ชั่นสร้างเส้นทางที่สมบูรณ์ …
10 zsh  osx  autocomplete 

4
รายการไฟล์ / ไบนารีทั้งหมดใน PATH ปัจจุบัน
มีวิธี "ใช้ง่าย" ในการรันคำสั่งลักษณะ "ls -la" สำหรับการแสดงรายการไฟล์ทั้งหมด / ไบนารีที่ปฏิบัติการได้ใน PATH ปัจจุบันหรือไม่? (ฉันตั้งใจที่จะไพพ์เอาต์พุตเป็น grep สำหรับการค้นหาคำสั่งที่ไม่รู้จักคำนำหน้า แต่รู้จักกันโดยทั่วไปว่า "ชื่อ" ชนิดของกรณีเมื่อการเติมข้อมูลอัตโนมัติ / การแท็บในทุบตีนั้นไม่มีประโยชน์ คุณสมบัติที่สมบูรณ์ "... )
10 bash  ls  path  autocomplete 

2
ยกเลิกการเติมแท็บ zsh
มีวิธียกเลิกการเสร็จสิ้นหรือไม่เมื่อเริ่มต้นแล้ว? บางครั้งฉันก็กดแท็บเพื่อเติมข้อความอัตโนมัติให้เป้าหมาย (จากความเกียจคร้านที่แท้จริง) และจบลงด้วยการต้องรออีกนานกว่าถ้าฉันเพิ่งพิมพ์ "ติดตั้ง" หรือ "ตรวจสอบ" ด้วยตัวเอง ฉันไม่เห็นข้อความใด ๆ ในหน้า man zshzle แต่ฉันอาจพลาดบางสิ่ง กระสุนอื่น ๆ มีความสามารถนี้หรือไม่? แก้ไข : คำตอบเล็กน้อย ดังนั้นแทน: มีวิธีให้ zsh ประเมินว่าการใช้แท็บเสร็จสมบูรณ์จะใช้เวลาค่อนข้างนานในการดำเนินการหรือไม่และถามว่าผู้ใช้ต้องการทำเช่นนี้หรือไม่
10 zsh  autocomplete 

1
ตัวเลือกรายการ zsh apt เสร็จสิ้น
ฉันใช้ในการใช้แท็บเสร็จในทุบตีที่จะได้รับapt list --upgradableจากการพิมพ์apt ltab--utabแต่ผมไม่สามารถทำสิ่งเดียวกันกับ zsh: --uไม่ได้ขยายตัวออกไปเมื่อกด--upgradabletab ฉันค้นหาโซลูชันที่แนะนำให้ติดตั้ง zsh-completions และเพิ่มsetopt completealiasesเข้าไป./zshrcแต่ไม่ได้ช่วยอะไรทั้งนั้น มีวิธีใดที่จะทำให้มันทำงานเหมือนที่ทำในทุบตี?
10 zsh  autocomplete 

2
การรวมความสมบูรณ์ของแท็บของ zsh เข้ากับการไม่คำนึงถึงขนาดตัวพิมพ์
ฉันกำหนดค่า zsh 5.0.7 ให้ใช้งานแท็บที่ไม่ตรงตามตัวพิมพ์ใหญ่ - เล็ก zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' ปัญหาที่ฉันมีคือกรณีนี้ความรู้สึกไวมักจะทำให้ฉันต้องกดTabเวลาเพิ่มเติม ตัวอย่างเช่นไดเรกทอรีหลักของฉันมีโฟลเดอร์“ เดสก์ท็อป”“ เอกสาร” และ“ ดาวน์โหลด” ถ้าฉันอยู่ในโฟลเดอร์บ้านของฉันและฉันพิมพ์ cd D จากนั้นกดTabฉันเห็นความเป็นไปได้สามอย่างที่ระบุไว้สำหรับฉัน ในทางกลับกันถ้าฉันพิมพ์ cd d จากนั้นกดปุ่มTab“ d” จะเปลี่ยนเป็น“ D” แต่ฉันไม่เห็นเมนูเสร็จสิ้น ฉันต้องกดTabอีกครั้งเพื่อที่จะเกิดขึ้น มีวิธีการรับเมนูเสร็จในเวลาเดียวกันกับที่ "d" ถูกเปลี่ยนเป็น "D" หรือไม่?
10 zsh  autocomplete 

3
เสร็จสิ้นคำบนหน้าจอเช่นเดียวกับใน VIM (Bash หรือ Tmux)
ฉันจะกำหนดค่า Bash, Zsh หรือ Tmux เพื่อทำให้ตัวระบุที่ตรงกันล่าสุดบนหน้าจอสมบูรณ์ได้อย่างไร พิจารณาสถานการณ์สมมติทั่วไปนี้: $ git fetch remote: Counting objects: 16, done. remote: Compressing objects: 100% (9/9), done. remote: Total 9 (delta 4), reused 0 (delta 0) Unpacking objects: 100% (9/9), done. From /opt/git/thunder * [new branch] issue540 -> origin/issue547314 e9204cf..4d42c3f v2.1 -> origin/v2.1 ฉันจะทำให้ Bash / …

2
รีเฟรชแท็บ bash ให้สมบูรณ์
ฉันมีสคริปต์สำหรับเติม ssh-hosts ของฉันโดยอัตโนมัติ หากฉันเปลี่ยน~/.ssh/configการเติมข้อมูลอัตโนมัติของฉันไม่ได้รับการอัพเดตโดยอัตโนมัติ นี่ไม่ได้ทำให้ฉันประหลาดใจ ในเชลล์ใหม่รายการใหม่ถูกหยิบขึ้นมาและใช้งานได้แน่นอน ฉันจะเรียกการรีเฟรชของความสำเร็จด้วยตนเองได้อย่างไร

1
zsh - ขยายพา ธ ไบนารีแบบเต็มบน <tab>
ในพฤติกรรม zsh ปัจจุบันของฉันกดปุ่มแท็บหลังจากพิมพ์ "sudo" เพียงแค่เพิ่มช่องว่าง $ sudo ... สิ่งที่ฉันต้องการคือให้แท็บขยายอย่างเต็มที่ไปยังเส้นทางของไบนารีที่จะดำเนินการเมื่อฉันกดแท็บทำให้ฉันเห็นสิ่งที่จะทำงาน: $ /usr/bin/sudo ... เป้าหมายคือเพื่อป้องกันกรณีที่ผู้ใช้ในเครื่องของฉันถูกแฮกรายการที่เพิ่มลงใน$PATHตัวแปรของฉันและ 'sudo' เรียกใช้โปรแกรมที่เป็นอันตราย
10 zsh  path  autocomplete 

3
ฉันจะตั้งค่ากฎการเติมข้อความอัตโนมัติ Zsh สำหรับอาร์กิวเมนต์ที่สอง (ฟังก์ชัน) เป็นกฎของคำสั่งที่มีอยู่ได้อย่างไร
ฉันมีฟังก์ชั่น Zsh ที่กำหนดเองg : function g() { # Handle arguments [...] } ภายในนั้นฉันจัดการกับข้อโต้แย้งสั้น ๆ ที่เรียกใช้คำสั่ง Git ตัวอย่างเช่น: g ls # Executes git ls-files ... g g # Executes git grep ... ฉันต้องสามารถตั้งค่ากฎการเติมข้อความอัตโนมัติให้เป็นกฎของ Git สำหรับข้อโต้แย้งสั้น ๆ แต่ฉันไม่แน่ใจว่าจะทำอย่างไร ตัวอย่างเช่นฉันต้องg ls &lt;TAB&gt;แท็บทำตามกฎgit ls-files &lt;TAB&gt;ซึ่งจะทำให้ฉันมีข้อโต้แย้งสำหรับgit ls-files: $ g ls --&lt;TAB&gt; --abbrev -- set minimum …
9 zsh  autocomplete  git 

1
Zsh auto complete แนะนำฟังก์ชั่นที่สมบูรณ์ (_git _vim ฯลฯ )
ฉันมีความรำคาญเล็กน้อยกับวิธีการzshทำคำแนะนำที่สมบูรณ์สำหรับคำสั่งของฉัน หากฉันพิมพ์จุดเริ่มต้นของคำสั่งที่ฉันยังไม่ได้ติดตั้งและกดtabมันจะแนะนำฟังก์ชันความสมบูรณ์ที่ติดตั้ง ช่วยบอกว่าผมต้องการที่จะดำเนินการแต่ก็ไม่ได้ติดตั้งก็จะแนะนำvim_vim มีวิธีปิดหรือไม่ หรือฉันทำอะไรผิดพลาดในการตั้งค่าของฉัน? ทั้งหมด dotfiles github.com/henrikbjorn/castleของฉันอยู่ในที่สาธารณะ

1
ปิดใช้งานการเติมข้อความอัตโนมัติ Bash สำหรับคำสั่งเฉพาะเท่านั้น
เป็นไปได้หรือไม่ที่จะปิดการเติมข้อความอัตโนมัติของ Bash สำหรับคำสั่งเฉพาะเท่านั้น? กรณีใช้: ด้วยเหตุผลที่ชัดเจนฉันต้องการปิดใช้งานการเติมข้อความอัตโนมัติสำหรับrmคำสั่งเมื่อฉันรูท มันจะเป็นความเจ็บปวดที่น่ากลัวถ้าฉันปิดใช้งานการเติมข้อความอัตโนมัติโดยสิ้นเชิงดังนั้นฉันจึงต้องการลบออกrmเพียงอย่างเดียว สามารถทำได้ทั้งหมดโดยเฉพาะอย่างยิ่งโดยไม่แฮ็ค/etc/bash_completionและเพื่อน ๆ

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