Với Bash + iTerm2, làm thế nào để đặt tên cho các tab?


176

Trong iTerm2 (Build 1.0.0.20120203), tôi thường mở một số tab, mỗi tab có các bảng phân chia và nói về một chủ đề cụ thể của công việc, ví dụ như kiểm soát sửa đổi, mã hóa, quản lý tệp, thiết bị đầu cuối mysql. Tôi thường cần phải chuyển đổi giữa 5 hoặc nhiều tab trong luồng công việc của mình. Đôi khi rất khó để nhớ hoặc cho biết đó là cái gì bằng cách nhìn vào nội dung của màn hình. Tôi muốn đặt tên cho các tab bằng cách nào đó, vì vậy tôi có thể nhanh chóng biết đó là cái gì bằng cách nhanh chóng liếc nhìn. Điều này có thể không?



Không hoàn toàn trùng lặp. Vậy làm thế nào để thêm ứng dụng hiện đang chạy như một phần của tiêu đề tab? Tức là tab nào đang chạy emacs, mysql, v.v.?
qazwsx

1
Tức là tất cả các tab của tôi có cùng máy chủ và người dùng. Vì vậy, sử dụng chúng sẽ không phân biệt các tab của tôi.
qazwsx

Bạn có nghĩa là bạn muốn Hiển thị tên công việc hiện tại từ sở thích của iTerm? Lưu ý rằng chủ đề được liên kết không phải là về tên người dùng hoặc máy chủ lưu trữ.
Daniel Beck

Phải, tôi muốn hiển thị một số dấu hiệu cho biết chương trình nào đang chạy hoặc đã chạy trong mỗi tab. Ngoài ra, giải pháp được đưa ra trong bài đăng khác không hoạt động đối với Bash + iTerm2.
qazwsx

Câu trả lời:


212

Vì bạn đang sử dụng iterm2 trên máy mac, nên một tùy chọn khác là bạn có thể chỉ cần nhấn CmdI, nhập một cái gì đó và nhấn ESC.

Giải pháp đầu cuối nhanh hơn một chút so với điều này, nhưng chỉ muốn cho bạn biết.


11
Điều này hoạt động trong một giây cho đến khi tôi đưa ra một lợi nhuận trên tab mà tôi đã đổi tên.
Stewie

15
@Stewie Trong Tùy chọn -> Cấu hình -> Thiết bị đầu cuối, bỏ chọn "Cho phép thiết bị đầu cuối báo cáo tiêu đề cửa sổ".
Max Cantor

3
Nó không được kiểm tra. Nó vẫn đổi tên tiêu đề.
Stewie

6
@SteveBennett không phải là "chủ đề" (thực ra thuật ngữ là "hồ sơ"); lệnh CMD + I là "Chỉnh sửa phiên hiện tại ..." (trong menu Xem), do đó, nó chỉ thay đổi thể hiện của tab đó trong hồ sơ. Đánh thoát chỉ cần đóng cửa sổ, điều này là cần thiết vì cửa sổ đó không có nút "lưu" trên đó.
Nửa đêm

4
Điều gì nếu bạn có nhiều tấm mở? Bạn có phải đổi tên từng cái để đặt tên đầy đủ cho chính tab không?
theicfire

119

Tôi đã tìm thấy chức năng sau đây, được đặt trong tôi ~/.bashrclà hữu ích:

function title {
    echo -ne "\033]0;"$*"\007"
}

Sau đó, tôi có thể gọi nó từ dấu nhắc bash của mình như sau:

> title I want a pony!

Và tab của tôi có tiêu đề phù hợp.


1
Tôi đã thử điều này, nhưng nó vẫn không hoạt động. Tôi đưa định nghĩa này vào bash_aliasesvà tải nó vào .profile( if [ -f ${HOME}/.bash_aliases ]; then . ${HOME}/.bash_aliases fi) Nhưng sau đó title dogkhông biến tiêu đề tab thành "dog"
qazwsx

2
+1 - Tôi đã thêm của tôi vào / etc / profile chỉ vì đó là bí danh của tôi ... đừng quên lấy nguồn sau khi bạn hoàn thành. Lưu ý: điều này cũng hoạt động trong thiết bị đầu cuối.
blak3r

3
Rất hữu ích. Tôi muốn một con ngựa; và tôi đã có một!
SoEzPz

1
Tôi đặt cái của tôi vào .bash_profile, khởi động lại và nó hoạt động như một lá bùa.
C Johnson

1
Những người nghĩ rằng nó không hoạt động bởi vì dấu nhắc lệnh của bạn ngay lập tức thay đổi nó trở lại. Hãy thử title dog && sleep 5và bạn sẽ thấy rằng nó hoạt động. Lưu ý câu trả lời từ @schpet để giải quyết vấn đề này
Mikhail

45

chạy lệnh này để đặt tiêu đề của tab hoặc cửa sổ của bạn:

export PROMPT_COMMAND='echo -ne "\033]0;YOUR NAME HERE\007"'

Tôi đã thêm các mục sau vào ~/.bash_profiledanh sách của tôi để luôn liệt kê thư mục hiện tại liên quan đến thư mục nhà của tôi:

export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007"'

hữu ích khi bạn có 100 thiết bị đầu cuối thu nhỏ trong dock của bạn

mũ cho thế giới mac


Việc thoát khỏi lệnh xuất khẩu đó không thực sự hiệu quả với bash của tôi vì một số lý do (v5.0.7), đây là những gì làm việc cho tôi:export PROMPT_COMMAND='echo -ne "\033]0;${PWD/$HOME/\~}\007"'
Mike Fogel

18

Tôi đã sử dụng các giải pháp tương tự như trên trong một thời gian dài, nhưng tôi sử dụng đủ các tab mà tôi cũng muốn chúng được mã hóa màu để dễ dàng tham khảo trực quan. Vì vậy, tôi đã đánh dấu tabset , một tiện ích để đặt tiêu đề tab, huy hiệu và màu sắc dựa trên loại công việc tôi đang làm trong mỗi tab.

thí dụ

Nó đòi hỏi nút , nhưng đó là một nền tảng thường được cài đặt. Để cài đặt:

npm install -g iterm2-tab-set

Điều này thật tuyệt! Tôi đặc biệt thích cài đặt tự động của màu tab. Cảm ơn bạn!
Ashutosh Jindal

1
Ồ Đây là một công cụ tuyệt vời!
dmulvi

Tôi hiện đang sử dụng phương pháp này thay vì phương pháp được mô tả trong câu trả lời được chấp nhận (<kbd> Cmd </ kbd> <kbd> I </ kbd>, nhập nội dung nào đó và nhấn <kbd> ESC </ kbd>)
qazwsx

but that is now a commonly installed platformHahaha.ha ... ha ......, đợi đã, bạn có nghiêm túc không?
Tên giả

Vâng, nghiêm túc. Ngày nay, các nhà phát triển và người dùng DevOps, đối tượng mục tiêu tự nhiên của các ứng dụng đầu cuối đã cài đặt node.js. Hoặc có thể cài đặt nó dễ dàng. Những người không / không thể được chào đón quay trở lại các phương pháp dựa trên bash / zsh / vv.
Jonathan Eunice

16

Thêm chức năng này vào ~/.bash_profiletập tin của bạn và nó sẽ hoạt động.

function title ()
{
    TITLE=$*;
    export PROMPT_COMMAND='echo -ne "\033]0;$TITLE\007"'
}

7

Tôi thích cái này:

#setup terminal tab title
function title {
    if [ "$1" ]
    then
        unset PROMPT_COMMAND
        echo -ne "\033]0;${*}\007"
    else
        export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007"'
    fi
}
title

Nó sẽ cho phép bạn chuyển tên của tab giữa tên tùy chỉnh và mặc định của CWD của bạn.

title -> tiêu đề tab của bạn sẽ là ~/YOUR_CWD/

title hey there -> tiêu đề tab của bạn sẽ là hey there


Lưu ý rằng, như vậy, điều này sẽ đóng băng tích hợp vỏ iTerm.
Michael

5

Tôi thực sự thích câu trả lời của taylorstine , nhưng nó phá vỡ sự tích hợp vỏ của iTerm2 dựa trên PROMPT_COMMANDbiến. Bạn có thể sửa đổi mã của Taylor để sửa lỗi này bằng cách thêm mặt __bp_precmd_invoke_cmdsau vào PROMPT_COMMANDbất kỳ lúc nào bạn sửa đổi nó:

# iTerm2 shell integration
test -e "${HOME}/.iterm2_shell_integration.bash" && source "${HOME}/.iterm2_shell_integration.bash"

# iTerm2 tab titles
function title {
    if [ "$1" ]
    then
        export PROMPT_COMMAND='__bp_precmd_invoke_cmd'
        echo -ne "\033]0;${*}\007"
    else
        export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/\~}\007";__bp_precmd_invoke_cmd'
    fi
}
title

3

Tôi thích câu trả lời của Michael .

Nhưng nếu .iterm2_shell_integration.bashkhông tồn tại thì sao?

Đây là của tôi:

# iTerm2 shell integration
test -e "${HOME}/.iterm2_shell_integration.bash" && source "${HOME}/.iterm2_shell_integration.bash"

# iTerm2 tab titles
function title {
  if [ "$1" ] ; then
    test -e "${HOME}/.iterm2_shell_integration.bash" \
      && export PROMPT_COMMAND='iterm2_preexec_invoke_cmd' \
      || unset PROMPT_COMMAND
    echo -ne "\033]0;${*}\007"
  else
    test -e "${HOME}/.iterm2_shell_integration.bash" \
      && export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007";iterm2_preexec_invoke_cmd' \
      || export PROMPT_COMMAND='echo -ne "\033]0;${PWD/#$HOME/~}\007"'
  fi
}
title

1
Lưu ý rằng trong phiên bản 3.1, iterm2_preexec_invoke_cmdđã trở thành__bp_precmd_invoke_cmd
Michael

2

Nếu bạn đang làm việc với Tiểu sử (rất thuận tiện): Tùy chọn -> Giao diện -> Tiêu đề Cửa sổ & Tab: đánh dấu 'Hiển thị tên hồ sơ':

Hình ảnh, tưởng tượng

Đó là cách nó chăm sóc:

hình thu nhỏ được liên kết với hình ảnh chính


2
Preferences -> Profiles -> Terminal
  uncheck Terminal may set Tab/Window title

Nhận xét của Max Cantor làm việc cho tôi.


1

Tôi nghĩ Tự động chuyển đổi và phù hiệu được thiết kế chính xác cho những gì bạn cần:

Tự động chuyển đổi hồ sơ iTerm2 có thể sử dụng thông tin mà nó biết về đường dẫn hiện tại, tên máy chủ và tên người dùng để thay đổi hồ sơ. Ví dụ: màu nền của cửa sổ hoặc mã hóa ký tự của thiết bị đầu cuối có thể thay đổi khi kết nối với các máy chủ khác nhau.

Huy hiệu Bạn có thể đặt huy hiệu ở phía trên bên phải của thiết bị đầu cuối hiển thị thông tin về phiên hiện tại. Nó có thể hiển thị tên người dùng, tên máy chủ hoặc thậm chí dữ liệu tùy chỉnh của bạn như nhánh git hiện tại.

vì vậy kết quả có thể như thế này:

nhập mô tả hình ảnh ở đây


Vui lòng trích dẫn các phần thiết yếu của câu trả lời từ (các) liên kết tham chiếu, vì câu trả lời có thể trở nên không hợp lệ nếu (các) trang được liên kết thay đổi.
DavidPostill

0

Tôi muốn mở rộng câu trả lời của B Seven một chút cho rõ ràng tuyệt đối.

Vì hầu hết chúng ta muốn biết làm thế nào người ta có thể đặt tiêu đề của tab ngay cả khi chúng không ở trong vỏ cục bộ, thay vì trong vỏ từ xa (ví dụ: trên ssh).

Bước 1. Preferences -> Profiles -> Terminal uncheck Terminal may set Tab/Window title

Bước 2. Đối với mỗi tab, double click on the tab -> Session Title

Bây giờ, bất cứ điều gì bạn đặt trong tiêu đề phiên, nó sẽ vẫn như cũ.


-2

Yuk, tất cả những bí danh và chức năng. Giải pháp dễ dàng hơn (nếu bạn đã root), dán phần này vào một thiết bị đầu cuối:

TARGET=/usr/bin/title
sudo tee "$TARGET" <<'EOF'
#!/usr/bin/env bash
echo -ne "\033]0;$*\007"
EOF
sudo chmod 755 "$TARGET"

Hoặc chỉ cần tạo một tiêu đề cuộc gọi tệp ở đâu đó trong đường dẫn của bạn hoặc đường dẫn chung và dán hai dòng giữa EOF.


12
"Yuk với tất cả những bí danh." Nhập câu trả lời không ai có thể nhớ hoặc gõ bằng tay.
Dan

1
@ Dan không nói điều này là rất tốt, chỉ là không có cần phải nhớ rằng kể từ khi nó chỉ tạo ra một kịch bản gọi titletrong /usr/bin.
Emile Bergeron

@EmileBergeron thx, mặc dù có vẻ như bạn (chúng tôi) là thiểu số. Câu trả lời chỉ có 1 dòng, phần còn lại dành cho những người lười biếng.
Orwellophile
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.