2013-02-27 21 views
25

Tôi mới dùng tmux và đang cố gắng tìm ra cách chỉnh sửa cấu hình sao cho cửa sổ có vim mở hiển thị trong thanh tác vụ không phải là #:vim nhưng như tên của tệp mở trong vim là
(ie "#:filename.php"). Có vẻ như nó phải là một điều phổ biến, nhưng tìm kiếm của tôi - foo là thất bại.tab tmux với tên tệp mở trong vim

+3

tôi sử dụng chia rất nhiều trong vim. nếu tôi mở 10 tệp trong bộ đệm và chia 4 tệp thành 4 cửa sổ, bạn cho tôi biết, bạn muốn hiển thị gì trong nhãn cửa sổ tmux? – Kent

+1

@Kent Giả sử chỉ có một tệp duy nhất được mở trong một cửa sổ duy nhất. Điều này có thể được thực hiện? –

+1

Kent: bạn có thể xác định các autocommands thích hợp trong Vim để gọi 'tmux rename-window' với tên của tệp trong bộ đệm hoạt động. – chepner

Trả lời

32

Đây là câu trả lời một phần. Nó có thể được cải thiện, nhưng tôi không có thời gian để làm việc đó ngay bây giờ.

Đặt sau trong .vimrc của bạn:

autocmd BufReadPost,FileReadPost,BufNewFile * call system("tmux rename-window " . expand("%")) 

Có những sự kiện khác (xem :help autocmd-events trong Vim) có thể được sử dụng để xử lý là tốt. Một điều tôi chưa biết là làm thế nào để thay đổi tên cửa sổ nếu bạn có một thể hiện của vim mở trong mỗi hai khung, và bạn chuyển từ một cửa sổ sang khác. vim không biết hoạt động trong tmux, vì vậy không có sự kiện vim nào được kích hoạt.

+14

Tôi đã phải tinh chỉnh điều này để sử dụng mở rộng() để có được dấu phần trăm để mở rộng đến tên cửa sổ, nếu không tôi chỉ nhận được "%" làm tên cửa sổ của tôi. Điều này là với vim 7.3. Tức là: autocmd BufReadPost, FileReadPost, BufNewFile * hệ thống gọi ("tmux rename-window". Expand ("%")) – Von

+4

Tôi đã tìm thấy khi sử dụng nhiều panes hoặc windows, hoặc fugitive tôi cần thêm BufEnter vào danh sách các sự kiện để giữ tựa đề khi di chuyển giữa các vùng đệm. – Von

+7

mở rộng ("%: t") sẽ đặt tên tệp trong khi mở rộng ("%") hiển thị đường dẫn đầy đủ. – Nobu

16

Có thể! Tôi muốn chia sẻ câu trả lời này bởi vì tôi đã tìm kiếm nó trong một thời gian dài. Cuối cùng đã có thời gian để thực hiện nó bản thân mình. Đặt sau đây trong .vimrc của bạn:

autocmd BufEnter * let &titlestring = ' ' . expand("%:t") 
set title 

Nó sẽ đặt tiêu đề ga để chỉ tiêu đề tài liệu hiện tại tập trung (%t đứng cho tiêu đề tài liệu mà không có đường dẫn). Nhờ sự kiện BufEnter, tiêu đề thiết bị đầu cuối thay đổi mỗi khi bạn chuyển tiêu điểm sang tài liệu khác. Ngoài ra khi rời khỏi Vim, nó được thay đổi về trạng thái ban đầu. Đặt (hoặc thay thế) sau trong .tmux.conf của bạn:

set-window-option -g window-status-current-format "[#I #W#T]" 
set-window-option -g window-status-format "[#I #W#T]" 

Nó không phải là cần thiết để sao chép nó một cách chính xác, nhưng có vẻ như vậy:

[1 vim .tmux.conf][2 bash]... 

Các I đứng cho số cửa sổ. Các W là viết tắt của các ứng dụng hiện đang được chạy và đứng T cho tiêu đề thiết bị đầu cuối. Sau đó, chúng tôi sử dụng để hiển thị tập tin hiện tại mở trong vim. Tiêu đề terminal luôn set (thiết bị đầu cuối bash tôi luôn luôn hiển thị tên máy mà tôi không cần phải nhìn thấy trong giới thiệu thanh trạng thái của tôi), vì vậy để chỉ hiển thị khi chạy vim thêm dòng sau vào .bashrc của bạn:

PROMPT_COMMAND='echo -ne "\033]0;\007"' 

Điều này đúng với bash, shell tôi sử dụng. PROMPT_COMMAND được đánh giá ngay trước khi dấu nhắc của bạn được hiển thị trong terminal. Lệnh echo đặt tiêu đề thiết bị đầu cuối thành không có gì. Hành động này do đó sẽ xảy ra mỗi khi bạn nhận được lời nhắc của bạn từ các ứng dụng có thể đã thay đổi tiêu đề. Các vỏ khác có thể cần phải được định cấu hình khác nhau ...

Tôi sẽ không sử dụng tmux rename-window vì nó đặt tiêu đề cho miễn là các cửa sổ tồn tại. Bạn sẽ cần phải gọi nó cho mỗi lần khởi chạy ứng dụng. Cách tiếp cận được trình bày giữ cho mọi thứ năng động, vì nó hoạt động với nhiều khung trong một cửa sổ và nhiều màn hình/tệp được chia nhỏ mở trong vim.

+0

Tôi đã thử điều này mà không có bất kỳ may mắn. Bất kỳ mẹo gỡ lỗi nào? Tôi đã khởi động lại tmux. –

+0

Đây không phải là đủ thông tin để tiếp tục nhưng vì vậy, bạn có thể đoán là bạn không sử dụng bash làm thiết bị đầu cuối mặc định. TMUX có thể sử dụng bash bằng cách đặt "set-option -g default-shell/bin/bash" trong ".tmux.conf" của bạn. Có lẽ bạn không nhìn thấy thanh trạng thái có thể được sửa bằng cách thêm "set-option -g status on". Bất kỳ may mắn? – gospes

+1

'autocmd BufEnter * let & titlestring = ''. mở rộng ("%: t") 'dường như không làm việc cho tôi bên trong tmux. Như @Phluks đã đề xuất, tôi đã sử dụng phương thức 'tmux rename-window' khi bên trong tmux. – studgeek

5

Thanks for guys đầu vào lớn nó tiết kiệm cho tôi rất nhiều cách gõ :-)

tôi kết hợp hai câu trả lời trước thành một, mà tôi thích.

autocmd BufEnter * call system("tmux rename-window " . expand("%:t")) 
autocmd VimLeave * call system("tmux rename-window bash") 
autocmd BufEnter * let &titlestring = ' ' . expand("%:t")                 
set title 

Dòng đầu tiên và sedond dành cho tmux và thứ ba và thứ tư là dành cho sử dụng thiết bị đầu cuối bình thường. Bạn không phải khởi động lại tmux vì nó là vim cập nhật tmux một cách rõ ràng.

+1

Hai câu trả lời trước đó đã không làm việc cho tôi, chỉ có cái này. Tại sao? – fiatjaf

1

Câu trả lời hay ở đây, nhưng tôi vẫn không thể làm việc theo cách mình muốn, đó là: 1) Thay đổi tên cửa sổ TMUX khi mở vim 2) Khi thoát. trả lại cho tên trước khi hoàn tất tôi đạt được nó với các dòng 3 vimrc sau:

autocmd BufReadPost,FileReadPost,BufNewFile * call system("tmux rename-window " . expand("%:t")) 
let tmuxtitle = system("tmux display-message -p '#W'") 
autocmd VimLeave * call system("tmux rename-window " . shellescape(tmuxtitle)) 
+0

Hoạt động tốt, ngoại trừ bộ đệm không có tên tệp. Bất kỳ ý tưởng làm thế nào để sửa chữa nó cho những người? – PonyEars

1

Để thay thế cho câu trả lời khác mà thiết lập tên cửa sổ tmux, bạn có thể có vim đặt tiêu đề cửa sổ tmux để thay thế. Điều này cho phép bạn giữ một tên cửa sổ tĩnh mà bạn xác định với tmux new-window -n <window-name> trong khi có vim thay đổi tiêu đề cửa sổ. Bạn có thể sử dụng #T trong set-titles-string để hiển thị tiêu đề cửa sổ, ví dụ: set-option -g set-titles-string "#W: #T" sẽ hiển thị tên cửa sổ tmux và tiêu đề cửa sổ.

Ví dụ cấu hình vim để thay đổi tiêu đề cửa sổ:

" Teach vim the tmux escape sequences for changing pane title 
" Note the "^[" should be a literal escape code (use `^v<esc>` to enter it) 
set t_ts=^[]2; 
set t_fs=^[\\ 

" Turn on setting the title. 
set title 

" The following causes vim to refresh the title each time we change buffers. 
" Otherwise it will only set the title once at startup. 
augroup RefreshTitle 
    autocmd! 
    " The concatenation of the colon is a hack to prevent vim from 
    " interpreting the string as a modeline. 
    autocmd BufEnter * let &titlestring = "vim" . ":" . expand("%:t") 
augroup END 

Kudos để vim.wikia.com cho t_tst_fs hướng dẫn và phluks cho autocommand.

+0

FWIW, đối với tôi chỉ "đặt tiêu đề" và "đặt titlestring =% t" giữ tiêu đề cửa sổ được cập nhật khi tôi chuyển bộ đệm và tôi không cần lệnh augroup/BufEnter. –

2

Và để khôi phục lại tiêu đề cửa sổ tự động trên lối Vim:

autocmd VimLeave * call system("tmux setw automatic-rename") 

Tôi cũng xin đề nghị để kiểm tra xem chúng tôi đang chạy dưới tmux:

if exists('$TMUX') 
    autocmd BufEnter * call system("tmux rename-window '" . expand("%:t") . "'") 
    autocmd VimLeave * call system("tmux setw automatic-rename") 
endif