Thay đổi tiêu đề tab và cửa sổ iTerm2 trong zsh


50

Tôi muốn gắn nhãn các tab cửa sổ của phiên cuối. Tôi đang sử dụng zshell trong iterm2 trên OSX. Có thể thay đổi nhãn của tab cửa sổ một cách linh hoạt trong thiết bị đầu cuối không?

Câu trả lời:


48

Bạn có thể nhập thông tin sau vào zshđể đặt tiêu đề cửa sổ của iTerm2:

echo -ne "\e]1;this is the title\a"

Nếu bạn muốn tự động hóa để chèn, ví dụ như thời gian hiện tại hoặc thư mục làm việc, hãy chỉnh sửa các zshtệp cấu hình của bạn để đặt tiêu đề trong precmd()hàm thành vd $PWD.

echo -ne "\e]1;$PWD\a"

Bạn có thể đọc về precmdchức năng trong man zshmiscphần SPECIAL FUNCTIONS.

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


3
khi tôi thực hiện lệnh echo -ne "\ e] 1; đây là tiêu đề \ a" tiêu đề tab không thay đổi. Có cài đặt nào tôi phải thay đổi trong iterm2 không?
bneil

15
Tìm ra. Tôi phải bỏ chọn tất cả các tùy chọn cho tiêu đề cửa sổ và tab trong phần iterm-> Preferences-> giao diện. và trong .zshrc tôi phải bỏ ghi chú / thêm xuất DISABLE_AUTO_TITLE = "true" Cảm ơn
@Daniel

3
Bạn cũng cần phải thiết lập Profiles > Terminal > Terminal Emulation > Terminal may set tab/window title.
vaughan

1
ĐIỀU NÀY KHÔNG LÀM VIỆC (ít nhất là đối với tôi) TRONG PHIÊN BẢN MỚI NHẤT CỦA iTerm (3.3.0)
iconoclast

Và không hoạt động với tôi trên phiên bản ổn định mới nhất của iTerm2(3.2.9)
jalanb

45

Những gì làm việc cho tôi:

echo -e "\033];this is the title\007"

Nếu bạn sử dụng Mac OSX và iTerm, iTerm2 ::

  • iTerm → Tùy chọn → Giao diện → Tiêu đề Cửa sổ & Tab → bỏ chọn tất cả

Nếu bạn sử dụng zsh, thì bạn có thể cần phải chỉnh sửa cài đặt của mình. Cài đặt của bạn thường có trong tệp ~/.zshrc. Bạn muốn thêm hoặc chỉnh sửa cài đặt của mình để đảm bảo dòng này tồn tại:

DISABLE_AUTO_TITLE="true"

2
Nó vẫn hoạt động kể từ ngày 28/02/2018.
salep

38

Một trong những tiện ích của việc sử dụng iTerm là khả năng thiết lập tiêu đề tab & tiêu đề tab riêng biệt: ví dụ về việc sử dụng tiêu đề tab & cửa sổ riêng biệt

# $1 = type; 0 - both, 1 - tab, 2 - title
# rest = text
setTerminalText () {
    # echo works in bash & zsh
    local mode=$1 ; shift
    echo -ne "\033]$mode;$@\007"
}
stt_both  () { setTerminalText 0 $@; }
stt_tab   () { setTerminalText 1 $@; }
stt_title () { setTerminalText 2 $@; }

Bằng cách này, bạn có thể thấy ngay máy chủ nào mình kết nối trong cửa sổ nào và tiêu đề cửa sổ cho mỗi tab hiển thị người dùng & CWD.


2
Tôi chỉ nhận thấy rằng phiên bản Terminal.app trong OS X Lion cũng hỗ trợ điều này.
Orangenhain

Câu hỏi ngớ ngẩn: bạn thêm các mã này vào .bashrc, phải không?
qazwsx

Cũng xuất hiện rằng (trong iTerm2 Build 1.0.0.20140629) cho đến khi bạn thay đổi Tiêu đề cửa sổ ... nó sẽ theo dõi tiêu đề tab, bất kể điều gì. Tôi chắc chắn đó là một thiết lập. Khi tiêu đề Cửa sổ được thay đổi (2), nó không còn theo dõi tiêu đề tab.
Mei

Tôi đã sửa đổi chức năng trên để bao gồm dòng DISABLE_AUTO_TITLE="true"đã khắc phục sự cố và theo cách này nếu tôi không đặt tiêu đề, tôi vẫn nhận được tính năng tiêu đề tự động
user15681

5

A precmdkhông lừa. Tuy nhiên, một số chủ đề oh-my-zsh lộn xộn với tiêu đề cửa sổ. Đặt PR_TITLEBARthành một chuỗi trống để sửa nó.

set-window-title() {
  # /Users/clessg/projects/dotfiles -> ~/p/dotfiles
  window_title="\e]0;${${PWD/#"$HOME"/~}/projects/p}\a"
  echo -ne "$window_title"
}

PR_TITLEBAR=''
set-window-title
add-zsh-hook precmd set-window-title

Tôi cũng khuyên bạn nên chơi xung quanh với các cài đặt tab của iTerm2 trong Tùy chọn -> Giao diện.



2

Không có câu trả lời nào có vẻ phù hợp với tôi, có lẽ là cho phiên bản iterm2 (3.3.3).

Tôi đã tìm thấy điều này: https://gist.github.com/phette23/5270658#gistcomment-3020766

Về cơ bản, bạn có thể làm bất cứ điều gì được nói trong tất cả các câu trả lời khác, nhưng cũng cần phải đặt Preferences > Profiles > General > Title -> Name (Job)

Điều này làm việc cho tôi.


Đây không phải là dưới Generaltab, nó nằm dưới Profilestab
Falmarri

Đúng. Tôi đã bỏ lỡ > Profilesmột. Lỗi của tôi. Đã cập nhật.
Nuno Gonçalves

1

Câu trả lời được chấp nhận đã làm việc cho tôi trong một thời gian dài nhưng hiện đã bị hỏng trong phiên bản mới nhất của iTerm2. Một cách giải quyết mà tôi tìm thấy là kích hoạt API Python và tạo một tập lệnh đặt tên tab như vậy:

#!/usr/bin/env python3.7
import argparse

import iterm2

def get_args():
    parser = argparse.ArgumentParser(description='Set the tab name')
    parser.add_argument('name')
    return parser.parse_args()

ARGS = get_args()

async def main(connection):
    app = await iterm2.async_get_app(connection)
    window = app.current_terminal_window
    if window is not None:
        tab = window.current_tab
        await tab.async_set_title(ARGS.name)
    else:
        # You can view this message in the script console.
        print("No current window")

iterm2.run_until_complete(main)

Được lưu dưới dạng "tab_name.py", sau đó được gọi bằng:

~/Library/ApplicationSupport/iTerm2/iterm2env/versions/*/bin/python3 ~/Library/ApplicationSupport/iTerm2/Scripts/tab_name.py "new tab name"

Nó gần như không đẹp hoặc thanh lịch như câu trả lời được chấp nhận, nhưng nó hoạt động.


-2

iTerm -> Tùy chọn -> Giao diện -> Tiêu đề Cửa sổ & Tab -> kiểm tra Tùy chọn tên hồ sơ


1
Chào mừng bạn đến với Siêu người dùng! Trên trang web Hỏi & Đáp này, chúng tôi cố gắng cung cấp câu trả lời tốt cho câu hỏi mọi người hỏi. Một phần của việc viết một câu trả lời tốt là cung cấp bối cảnh cho giải pháp được đề xuất. Vui lòng chỉnh sửa câu trả lời của bạn và giải thích lý do tại sao giải pháp của bạn hoạt động, và cụ thể là gì.
cascer1
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.