Bash shell แท็บเสร็จสมบูรณ์อย่าขยาย ~


12

ฉันใช้Tabปุ่มมากเมื่อใช้เชลล์ (ทุบตี)

แต่ฉันก็รู้สึกหงุดหงิดที่~จะขยายไปถึง/home/"user"เสมอ ฉันไม่คิดว่ามันจะเป็นเช่นนี้เสมอไป มีวิธีใดที่จะหยุดพฤติกรรมนี้

ตัวอย่าง:

  1. cj@zap:~$ ls ~/
  2. กด Tab
  3. cj@zap:~$ ls /home/cj/

ฉันต้องการที่จะยังคงมีและไม่จบลงด้วย~//home/cj/


2
"ฉันไม่คิดว่ามันจะเป็นอย่างนี้เสมอไป" - ความสมบูรณ์ของโปรแกรมสามารถแทนที่การตั้งค่า readline set expand-tilde off(ค่าเริ่มต้นหรือการตั้งค่าใน~/.inputrc)
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

"bind -v | grep tilde" ส่งคืน "set expand-tilde off" ... ดังนั้นฉันไม่คิดว่ามันจะช่วยได้
Johan

shopt -p direxpandคุณอาจมีลักษณะที่
gam3

คำตอบ:


10

การปิดใช้งานการขยายตัวหนอนนั้นรวดเร็วและไม่เจ็บปวด เปิด~/.bashrcและใส่สิ่งนี้:

_expand()
{
    return 0;
}

/etc/bash_completionนี้จะแทนที่ฟังก์ชันขยายตัวจาก ฉันขอแนะนำให้แสดงความคิดเห็นในสิ่งที่มันทำหน้าที่เหนือฟังก์ชั่นในกรณีที่คุณต้องการการขยายตัวในอนาคต การเปลี่ยนแปลงจะมีผลในอินสแตนซ์ใหม่


แม้ว่า_expand(){ true; }จะสั้นกว่านี้ :)
tig

มันจะไม่เป็นอย่างนั้น_expand(){ false; }หรือ @tig
John T

2
@ จอห์น: ไม่ควรจริง trueผลตอบแทนที่ได้ผลประสบความสำเร็จและผลที่ประสบความสำเร็จเป็น 0 ดังนั้นreturn 0เท่ากับtrueในสถานะออกและจะมีค่าเท่ากับreturn 1 falseแค่ลองtrue; echo $?และfalse; echo $?.
tig

@tig การเขียนโปรแกรมมากเกินไปทำให้ฉันสับสน ... codepad.org/Frb3RyAN ในทำนองเดียวกันคุณพบสิ่งนี้ในรหัสจำนวนมาก (ดูด้านบน): cs.nthu.edu.tw/~tingting/DS_mid_solution.pdf ฉันคิดว่ามันเปลี่ยนไป ในเครื่องมือ GNU เพื่อระบุความหมายที่สมจริงยิ่งขึ้นเช่น "จริงโปรแกรมรันสำเร็จ" หรือ "เท็จ - โปรแกรมรันไม่ถูกต้อง"
John T

@John: ไม่เป็นไร :) «แม้แต่ John T ก็ผิด» (อย่าโกรธเคือง :))
tig

5

ด้วย bash_completion ที่ใหม่กว่าดูเหมือนว่าคุณจะต้องแทนที่ __expand_tilde_by_ref ด้วย:

__expand_tilde_by_ref() {
  return 0
}

1

ดานยิ่งขึ้น:

_expand() { :; }

... as ":" เป็นเชลล์ในตัวเทียบเท่ากับ "true" :-)


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