Làm cách nào để thay thế bộ đệm màn hình vim bằng hoạt động bash trước đó sau khi thoát?


14

Tôi đang cố gắng tìm hiểu tính năng bash (hoặc vim) là gì. Đây là kịch bản. Tôi đang ở trong một bash terminal, sau đó chỉnh sửa một cái gì đó bằng vim, sau đó thoát trở lại bash. Trong một số thiết bị đầu cuối, màn hình phiên vim biến mất để hiển thị hoạt động bash shell trước đó (đây là những gì tôi muốn?).

Trong những người khác, bộ đệm màn hình phiên vim vẫn còn (ẩn hoạt động vỏ bash cũ). Tôi sẽ phải xóa màn hình hoặc đợi cho đến khi hoạt động bash của tôi đẩy bộ đệm phiên vim ra khỏi màn hình.

Làm cách nào tôi có thể kiểm soát hành vi này để thay thế bộ đệm phiên vim bằng hoạt động bash trước đó?

Cảm ơn Tim


Câu trả lời:


10

Vim gửi t_tit_ksđến thiết bị đầu cuối khi phiên bắt đầu t_tet_kekhi kết thúc. Các t_tit_tetrình tự làm cho thiết bị đầu cuối chuyển sang màn hình thay thế của nó.

Trong ~/.vimrctệp của bạn, bạn có thể vimđể tài liệu trên màn hình khi thoát ra bằng cách bao gồm dòng này:

set t_ti=""

nếu bạn có một dòng tương tự như vậy, loại bỏ nó sẽ làm cho nội dung thiết bị đầu cuối trước đó xuất hiện khi bạn thoát vim.


4

Một nguyên nhân cho vấn đề này có thể được sử dụng chương trình screen. Tôi thấy rằng khi tôi trong một screenphiên vim không thể trả về trạng thái thiết bị đầu cuối.

Không chắc chắn nếu nó cụ thể cho màn hình hoặc kết hợp màn hình / vim trong Ubuntu 15.10. Nguyên nhân giống như mô tả ở trên, tôi đoán screencó thuật ngữ khác nhau.


2
Thêm altscreen onvào tập tin ~ / .screenrc giải quyết vấn đề cho màn hình.
BartBiczBoży

3

Chỉ cần thêm một dòng vào ~/.bash_profiletệp của bạn để xuất TATE dưới dạng xterm mỗi khi bạn đăng nhập. Làm như sau;

echo "TERM=xterm; export TERM" >> ~/.bash_profile

Bây giờ, lần tới khi bạn đăng nhập, vấn đề của bạn sẽ được khắc phục và nếu bạn không muốn đăng nhập lại, bạn có thể thực hiện một trong ...

// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile

1
sẽ không có được export $TERM?
chrsblck

1
@chrsblck: Không, vì exportxuất tên (ví dụ TERMtrong trường hợp này) dưới dạng biến môi trường thay vì biến cục bộ. Nếu bạn đã sử dụng export $TERMtrong ví dụ này thì $TERMvar sẽ giải quyết cho xtermbạn sẽ đặt var env $xterm, có thể không được xác định. Câu hỏi hay, nó luôn luôn có vẻ sai đối với tôi.
ekerner

2

Tim. Cả hai câu trả lời trên đều đúng. Vim chuyển thiết bị đầu cuối sang "màn hình thay thế" nếu khả năng thực hiện điều đó được xác định trong mục nhập thuật ngữ cho $ TERM.

Bạn nói "trong một số thiết bị đầu cuối (... nó hoạt động đúng ...)" và "trong các thiết bị khác (... nó hoạt động sai ...)"

Bạn có đang chạy trình giả lập thiết bị đầu cuối chính xác cho tất cả các thiết bị đầu cuối đó không?

Ví dụ, trên hộp linux tại nhà của tôi, tôi có gnome-terminal, xterm, Konsole, yakuake và có lẽ một vài điều nữa tôi đã quên, cùng với "thiết bị ảo" được liên kết với ctrl-alt-F1 ... ctrl-alt-F6 hoặc hơn. Hầu hết trong số này có thể hoạt động với mục nhập termcap "tiêu chuẩn" cho "xterm" - ngoại trừ các thiết bị đầu cuối ảo có định nghĩa thiết bị đầu cuối có tên là "linux".

Kiểm tra chính trình giả lập thiết bị đầu cuối và giá trị của $ TERM trên các thiết bị đầu cuối hoạt động và trên các thiết bị đầu cuối không hoạt động, để xem có gì khác biệt. Ngoài ra, nếu đôi khi bạn đăng nhập như một người dùng khác, đó có thể là vấn đề cốt lõi - vì mỗi người dùng có .bashrc, các cài đặt khác nhau có thể khác nhau giữa người dùng và người dùng.

Mong rằng sẽ giúp!
-pbr


1

Điều này phải làm với thiết bị đầu cuối của bạn và cài đặt của máy xử lý thông tin thiết bị đầu cuối. Một giải pháp di động là sử dụng GNU Screen. Mở một cửa sổ cho Vim và một cửa sổ khác cho Bash, do đó tách hai phiên. Nếu bạn đang sử dụng thiết bị đầu cuối đồ họa như xterm trên X11, Gnome Terminal trên Gnome hoặc Terminal.app trên OS X thì bạn có thể mở một cửa sổ hoặc tab mới để đạt được hiệu ứng tương tự.

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.