วิธีนามแฝง 'git' ถึง 'g' เพื่อให้กฎการเติมคำสั่ง bash เสร็จแล้วจะถูกเก็บไว้อย่างไร?


25

ถ้าฉันทำสิ่งนี้:

alias g='git'

ฉันทำกฎการทำให้เสร็จสมบูรณ์ทั้งหมด (เช่นกิ่งไม้และรีโมทไม่เสร็จสมบูรณ์โดยอัตโนมัติเมื่อฉันกด TAB หลังจากพิมพ์เป็นต้นg push o)


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

4
แน่นอนมันทำ! ฉันพิมพ์ 'g' มากกว่า 100 ครั้งต่อวัน
PawełGościcki

3
การใช้นามแฝงคำสั่งสั้น ๆ ที่ใช้บ่อยเพื่อนามแฝงที่สั้นลงช่วยให้ฉันกดแป้นพิมพ์หลายร้อยครั้งต่อวัน จากประวัติของเชลล์ฉันใช้นามแฝงg=git756 ครั้งในเดือนที่ผ่านมาซึ่งหมายความว่าฉันบันทึกการกดปุ่ม 'g' และ 'i' รวมทั้งสิ้น 1512 ครั้ง เมื่อรวมกับนามแฝง git ของฉันอาจช่วยให้ฉันสามารถกดปุ่มได้หลายหมื่นครั้งต่อเดือน

ประเด็นหลักของการกดแป้นที่สั้นลงคือการช่วยให้มือของคุณทันสมอง
Tyler Collier

สคริปต์ที่superuser.com/questions/436314/…ทำงานได้ดีฉันคิดว่าสมควรได้รับการกล่าวถึง
brandizzi

คำตอบ:


21

คัดลอกและแก้ไขอย่างรวดเร็วจาก/etc/bash_completion.d/gitเพิ่มบรรทัดต่อไปนี้ใน~/.bashrc:

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g

ฮา! Wunderbar! ทำงานได้อย่างที่ควรจะเป็น :)
PawełGościcki

1
ฉันต้องเพิ่มsource /usr/share/bash-completion/completions/gitใน. bashrc ของฉันด้วย
pcx

ไม่แน่ใจว่า.bashrcรหัสที่นี่ใช้งานได้หรือไม่ แต่คำตอบนี้ล้าสมัยไปแล้ว /etc/bash_completion.d/gitดูเหมือนจะไม่มีใน 14.04 ดูคำตอบของ lzapด้านล่าง
Max Wallace

18

อัปเดตอัปเดตของ bash เสร็จต้นแล้วย้ายและเปลี่ยนชื่อสิ่งเล็กน้อย ตอนนี้:

source /usr/share/bash-completion/completions/git
__git_complete g __git_main

ใช้สิ่งนี้ใน Ubuntu รุ่นล่าสุด (เช่น 14.04 หรือ Fedora 22+) เมื่อคุณพบ:

completion: function `_git' not found

ระหว่างเสร็จสิ้น


2
ดูเหมือนว่านี่เป็นคำตอบเดียวที่ถูกต้องที่นี่
pjvandehaar

ใช้__git_complete gc _git_checkout(หรือคล้ายกัน) เพื่อตั้งค่าความสำเร็จสำหรับนามแฝงที่เฉพาะเจาะจงมากขึ้น ค้นหา/usr/.../gitข้างต้นเพื่อค้นหาชื่อที่ถูกต้อง
Max Wallace

1
@MaxWallace - เมื่อคุณตั้งชื่อแทนสำหรับวิธี git เฉพาะใน. gitconfig (เช่น gc = checkout) คุณไม่จำเป็นต้องกำหนดค่าความสมบูรณ์ให้ชัดเจน
Piotr Aleksander Chmielowski

1
@PiotrAleksanderChmielowski ขอบคุณ! แต่ผมไม่คิดว่าผลงานที่ระดับบนสุดนามแฝงทุบตี (เช่นgc=> git checkout) เมื่อเทียบกับ aliasing cเพื่อcheckoutภายในและบอกว่าgit git cช่วยแก้ให้ด้วยนะถ้าฉันผิด.
Max Wallace

@ MaxWallace ใช่คุณถูกผิดความผิดพลาดของฉัน;)
Piotr Aleksander Chmielowski


2

ก่อนอื่นให้ค้นหาคำสั่งเสร็จสิ้นดั้งเดิม ตัวอย่าง:

$ complete | grep git

complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git

ตอนนี้เพิ่มสิ่งเหล่านี้ในสคริปต์เริ่มต้นของคุณ (เช่น ~ / .bashrc):

# copy the original statement, but replace the last command (git) with your alias (g)
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main g

# load dynamically loaded completion functions (may not be required)
_completion_loader git

_completion_loaderบรรทัดอาจไม่จำเป็นต้อง แต่สำหรับบางสถานการณ์ฟังก์ชั่นเสร็จจะโหลดแบบไดนามิกหลังจากคุณพิมพ์คำสั่งและกดTABครั้งแรกเท่านั้น ดังนั้นหากคุณไม่ได้ใช้คำสั่งดั้งเดิมและลองใช้นามแฝง + TABคุณอาจได้รับข้อผิดพลาดเช่น "bash: complete: function not found"


ใช้งานได้ดี สำหรับฉันนี่คือคำตอบที่ถูกต้องคำสั่ง grep ที่สมบูรณ์มีประโยชน์ ไม่ต้องการโหลดเดอร์เสร็จ
พอลคาร์ลตัน

1

วิธีการปรับปรุงการทำเช่นนี้ (สมบูรณ์จะไม่ทำงานสำหรับฉัน):

  1. cd - เปลี่ยนเป็นโฮมไดเร็กตอรี่ของคุณ
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. เพิ่มsource ~/git-completion.bashลงในไฟล์. bashrc ของคุณ (หากคุณไม่มีไฟล์นี้ให้สร้างไว้ในโฟลเดอร์โฮมของคุณ bash จะค้นหาโดยอัตโนมัติ)
  4. เพิ่มalias g='git'ลงในไฟล์. bashrc ของคุณ
  5. เริ่มเซสชันใหม่หรือระบุการเปลี่ยนแปลงของคุณด้วย source ~/.bashrc

2
คุณข้ามส่วนที่เพิ่มความสมบูรณ์ในความคิดเห็นที่คุณเชื่อมโยงกับ:__git_complete g _git
pjvandehaar

0

เพื่อความสมบูรณ์ฉันต้องการเพิ่มคำตอบโดยใช้~/.bash-completionไฟล์ซึ่งได้รับมาเมื่อสิ้นสุดสคริปต์ทุบตีเสร็จสมบูรณ์:

_xfunc git __git_complete g __git_main
_xfunc git __git_complete gl _git_log
_xfunc git __git_complete gd _git_diff
_xfunc git __git_complete gb _git_branch

จากนั้นฉัน~/.bashrcก็มีเพียงนามแฝง ฉันพยายาม:

  • หลีกเลี่ยงการ poluting ของฉัน~/.bashrcด้วยสิ่งทุบตีเสร็จ (เก็บสิ่งที่มันเป็นของ) ✓
  • หลีกเลี่ยงการจัดหาคอมไพล์ให้เสร็จสมบูรณ์ในเชลล์

โดยไม่เปิดเผย_xfuncแหล่งที่มาคอมไพล์สำเร็จ ฉันจะอัปเดตคำตอบนี้เมื่อฉันรู้วิธีการทำอย่างถูกต้อง (ฉันยังถามบนแผงควบคุมที่นี่ )


-1

ดูที่นี่: https://gist.github.com/scue/576310b7c6b7714aad05

wget https://gist.github.com/scue/576310b7c6b7714aad05/raw/459d46761c231f5c373c1cf496920b01bb6669d2/.bash_aliases.git -O ~/.bash_aliases.git
echo "test -e ~/.bash_aliases.git && source ~/.bash_aliases.git" >> ~/.bashrc

สนุก! (^ o ^) /


1
ขออภัยนั่นเป็นสิ่งที่แตกต่างอย่างสิ้นเชิง การสร้างนามแฝงอย่างง่ายสำหรับคำสั่งทั้งหมดนั้นเป็นเรื่องเล็กน้อย
PawełGościcki

ฉันเพียงแค่ทำให้การทำงานของพวกเขาเช่นปลั๊กอินคอมไพล์ของ Oh-My-zsh: github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/...
scue

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