Làm cách nào để đặt bí danh 'git' thành 'g' để các quy tắc hoàn thành bash được giữ nguyên?


25

Nếu tôi làm điều này:

alias g='git'

Tôi mất tất cả các quy tắc hoàn thành (ví dụ: các nhánh và điều khiển từ xa không còn được tự động hoàn thành khi tôi nhấn TAB sau khi nhập chẳng hạn g push o).


Trong khi tôi không có câu trả lời cho bạn, tôi sẽ phải mất một phút và tự hỏi liệu việc không gõ hai chữ cái kia có thực sự mang lại cho bạn nhiều lợi thế không?
Marco Ceppi

4
Chắc chắn là có! Tôi đang gõ 'g' có thể hơn 100 lần một ngày.
Paweł Gościcki

3
Bí danh các lệnh ngắn thường được sử dụng đến các bí danh thậm chí ngắn hơn giúp tôi tiết kiệm hàng trăm lần nhấn phím mỗi ngày. Theo lịch sử hệ vỏ của tôi, tôi đã sử dụng bí danh g=git756 lần trong tháng vừa qua, nghĩa là tôi đã lưu nhấn các phím 'g' và 'i' tổng cộng 1512 lần. Điều đó, kết hợp với bí danh git của tôi, có thể giúp tôi tiết kiệm hàng chục ngàn lần nhấn phím mỗi tháng.

Điểm chính của việc rút ngắn tổ hợp phím là giúp đôi tay của bạn theo kịp bộ não của bạn.
Tyler Collier

Kịch bản tại superuser.com/questions/436314/ đã làm việc rất tốt Tôi nghĩ rằng nó xứng đáng được đề cập.
brandizzi

Câu trả lời:


21

Sao chép và sửa đổi cơ hội từ /etc/bash_completion.d/git, thêm các dòng sau vào ~/.bashrc:

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

Hà! Wunderbar! Hoạt động đúng như vậy :)
Paweł Gościcki

1
Tôi cũng đã phải thêm source /usr/share/bash-completion/completions/gitvào .bashrc của mình
pcx

Không chắc chắn nếu .bashrcmã ở đây hoạt động, nhưng câu trả lời này chắc chắn đã lỗi thời. /etc/bash_completion.d/gitdường như không tồn tại vào ngày 14.04. Xem câu trả lời của lzap dưới đây.
Max Wallace

18

Bash hoàn thành mới nhất ngược dòng di chuyển và đổi tên mọi thứ một chút. Tuyết rơi:

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

Sử dụng điều này trong các phiên bản gần đây của Ubuntu (ví dụ 14.04, cũng như Fedora 22+) khi bạn gặp phải:

completion: function `_git' not found

trong quá trình hoàn thành


2
Có vẻ như đây là câu trả lời đúng duy nhất ở đây.
pjvandehaar

Sử dụng __git_complete gc _git_checkout(hoặc tương tự) để thiết lập hoàn thành cho các bí danh cụ thể hơn. Tìm kiếm /usr/.../gitnhư trên để tìm đúng tên.
Max Wallace

1
@MaxWallace - khi bạn đặt bí danh cho các phương thức git cụ thể trong .gitconfig (ví dụ: gc = checkout), không cần phải định cấu hình hoàn thành rõ ràng cho chúng.
Piotr Aleksander Chmielowski

1
@PiotrAleksanderChmielowski Cảm ơn! Nhưng tôi không nghĩ rằng tác phẩm cho bí danh bash cấp cao nhất (ví dụ gc=> git checkout) như trái ngược với răng cưa cđể checkouttrong vòng git, và nói git c. Sửa lỗi cho tôi nếu tôi sai.
Max Wallace

@MaxWallace Vâng, bạn nói đúng, lỗi của tôi;)
Piotr Aleksander Chmielowski


2

Đầu tiên, tìm kiếm lệnh hoàn thành ban đầu. Thí dụ:

$ complete | grep git

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

Bây giờ hãy thêm chúng vào tập lệnh khởi động của bạn (ví dụ ~ / .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

Các _completion_loaderdòng có thể không được yêu cầu. Nhưng đối với một số tình huống, chức năng hoàn thành chỉ được tải động sau khi bạn nhập lệnh và nhấn TABlần đầu tiên. Vì vậy, nếu bạn chưa sử dụng lệnh gốc và thử bí danh + TAB, bạn có thể gặp lỗi như "bash: xong: không tìm thấy chức năng".


Công trình tuyệt vời. Đối với tôi đây là câu trả lời đúng, lệnh grep hoàn thành rất tiện dụng. Không cần bộ nạp hoàn thành.
Paul Carlton

1

Cách cập nhật để làm điều này (hoàn thành sẽ không hiệu quả với tôi):

  1. cd - chuyển sang thư mục nhà của bạn
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. Thêm vào source ~/git-completion.bashtệp .bashrc của bạn (nếu bạn không có tệp này, hãy tạo một tệp trong thư mục nhà của bạn, bash sẽ tự động tìm nó)
  4. Thêm vào alias g='git'tệp .bashrc của bạn.
  5. Bắt đầu một phiên mới hoặc nguồn thay đổi của bạn với source ~/.bashrc

2
Bạn đã bỏ qua phần mà họ thực sự đã thêm hoàn thành trong nhận xét mà bạn đã liên kết đến:__git_complete g _git
pjvandehaar

0

Để hoàn thiện, tôi muốn thêm câu trả lời bằng cách sử dụng ~/.bash-completiontệp, được lấy nguồn ở cuối tập lệnh hoàn thành bash:

_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

Sau đó, trong tôi ~/.bashrctôi chỉ có bí danh. Tôi đã cố gắng để:

  • tránh làm phiền tôi ~/.bashrcvới những thứ hoàn thành bash (giữ những thứ thuộc về nó)
  • tránh tìm nguồn cung ứng toàn bộ git vào vỏ của tôi

Không chắc chắn các _xfuncnguồn git-hoàn thành anyway. Tôi sẽ cập nhật câu trả lời này một khi tôi tìm ra cách thực hiện đúng (tôi cũng đã hỏi trên bàn ăn trưa ở đây ).


-1

Nhìn vào đây: https://gist.github.com/scue/576 310b7c6b7714aad05

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

Tận hưởng! (^ O ^) /


1
Xin lỗi, nhưng đó là một cái gì đó hoàn toàn khác. Làm es bí danh đơn giản như vậy cho toàn bộ lệnh là chuyện nhỏ.
Paweł Gościcki

Tôi chỉ làm cho chúng hoạt động như plugin git của Oh-My-Zsh: github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/iêu
scue 27/05/2015

-1

Bạn chỉ có thể định nghĩa bí danh như bình thường:

alias g='git'

Sau đó cài đặt bí danh hoàn chỉnh để làm cho bash hoàn thành bí danh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.