2009-05-03 25 views
19

Tôi muốn sử dụng một trong các tính năng Git-completion.bash nhưng tôi không thể tùy chỉnh giao diện mà tôi muốn có. Đây là phần có liên quan của .bash_profile của tôi:Gắn tên chi nhánh của git để nhắc lệnh

source ~/.git-completion.bash 

function prompt 
{ 
local WHITE="\[\033[1;37m\]" 
local GREEN="\[\033[0;32m\]" 
local CYAN="\[\033[0;36m\]" 
local GRAY="\[\033[0;37m\]" 
local BLUE="\[\033[0;34m\]" 
export PS1=" 
${GREEN}\u${CYAN}@${BLUE}\h ${CYAN}\w $(__git_ps1 '(%s)') ${GRAY} 
$ " 
} 
prompt 

và không hiển thị tên chi nhánh.

Tuy nhiên, nếu tôi thay PS1 xuất khẩu trên với hình dưới đây, nó hoạt động như mong đợi:

export PS1='\w$(__git_ps1 "(%s)") > ' 

Tôi đoán nó là một số dấu nháy đơn/báo giá đánh dấu vấn đề.

Tôi nên sửa phiên bản đầu tiên để phiên bản hoạt động như thế nào?

Trả lời

31

Bí quyết để nhận được quyền trích dẫn là có eveything được trích dẫn kép, ngoại trừ $(__git_ps1 "(%s)"), được trích dẫn một lần.

source ~/.git-completion.bash 
function prompt 
{ 
local WHITE="\[\033[1;37m\]" 
local GREEN="\[\033[0;32m\]" 
local CYAN="\[\033[0;36m\]" 
local GRAY="\[\033[0;37m\]" 
local BLUE="\[\033[0;34m\]" 
export PS1=" 
${GREEN}\u${CYAN}@${BLUE}\h ${CYAN}\w"' $(__git_ps1 "(%s)") '"${GRAY}" 
} 
prompt 

Giải pháp thay thế là thay thế $( bằng \$( trong mã trong câu hỏi.

Thông tin cơ bản: Hai thay thế diễn ra: đầu tiên tại thời điểm export PS1="..." và sau đó khi lời nhắc được hiển thị. Bạn muốn thực hiện __git_ps1 mỗi lần lời nhắc được hiển thị, vì vậy bạn phải đảm bảo rằng thay thế đầu tiên giữ nguyên $(...). Vì vậy, bạn viết '$(...)' hoặc "\$(...)". Đây là hai ý tưởng cơ bản đằng sau các giải pháp mà tôi đã đề xuất.

+0

Đúng vậy! Cảm ơn :) –

+1

Sử dụng người dân địa phương cho màu sắc là một mẹo hay để làm cho mọi thứ có thể đọc được. Tôi đang ăn cắp ý tưởng đó chắc chắn. FYI cho những người khác, tôi thích sử dụng màu vàng cho đường dẫn của tôi - 'local YELLOW =" \ [\ 033 [0; 33m \] "' – studgeek

5

Không chắc chắn, nhưng vcprompt có thể giải quyết tốt hơn cho bạn?

+1

Nó có thể không bao gồm tất cả các tùy chọn của __git_ps1 trong git-completion.bash, nhưng tôi thực sự thích thực tế là nó cũng cung cấp thông tin về các hệ thống điều khiển phiên bản khác. Cảm ơn vì tiền hỗ trợ! –

Các vấn đề liên quan