Vim 8 đã thêm t_TE và t_TI là gì?

Sep 21 2020

Đầu tiên hãy để tôi hiển thị một ảnh chụp màn hình bên dưới.

Trong modeline, một chuỗi ký tự ( >4;m<ESC>[>4;m<ESC) kỳ lạ được hiển thị. Và không chỉ trong modeline, tôi đã thấy câu tương tự như vậy trong dòng lệnh khi :wqvà trong bộ đệm khi tôi cố gắng cập nhật các plugin bằng cách sử dụng :PlugInstall.

Nó không phải là một vấn đề lỗi, nhưng nó có vẻ khó chịu. Lúc đầu, tôi nghĩ rằng đó là một số chuỗi thoát ANSI bí ẩn. Nhưng khi tôi tìm kiếm thêm thông tin về điều đó, tôi tình cờ thấy rằng có vẻ như mã cho t_TE(^[[>4;m)và t_TI(^[[>4;2m). Hãy thử :set termcapvà bạn sẽ tìm thấy chúng. Tuy nhiên, chỉ có vim 8.2 (đó là phiên bản tôi sử dụng) hỗ trợ những mã này không đúng với vim 7.4 (vim mặc định được cài đặt bởi ubuntu 16.04).

Có rất ít thông tin về t_TEvà t_TI. Nhưng thành thật mà nói, tôi không tò mò chúng là gì và chúng hoạt động như thế nào. Tôi chỉ muốn tạm ngừng hiển thị về chúng. Tôi đoán, vì những mã này được thêm vào bởi vim mới, có thể những mã giống nhau không tương thích với gnome-terminal nên điều đó xảy ra. Nhưng tôi không biết và dù sao thì tôi cũng có kiến ​​thức rất hạn chế về termcap hoặc terminfo.

Thực ra tôi mới làm quen với vim. Nó thực sự chuyển hướng sự chú ý của tôi khi tôi nhìn thấy những mã kỳ lạ này. Tôi đánh giá cao sự giúp đỡ của bạn.

Cập nhật

Cảm ơn tất cả các bình luận và câu trả lời. Để hoàn thiện, tôi cập nhật thêm thông tin về nơi vim hoạt động và thông tin liên quan đến thiết bị đầu cuối của tôi.

  • Hệ điều hành của tôi là Ubuntu 16.04.7LTS
  • Tôi đang sử dụng terminator 1.91, nhưng tôi cũng đã thử trên GNOME Terminal 3.20.2 và vấn đề tương tự xảy ra
  • Của tôi $TERMlàxterm-256color

Có lẽ tôi cũng nên đăng những gì của tôi $termcapnhưng nó sẽ giống như một thư rác. Nhưng dù sao, tôi không nhớ là tôi đã đặt thủ công tất cả các biến môi trường liên quan đến thuật ngữ, vì vậy tôi tin rằng chúng là những gì chúng đang có với các giá trị mặc định, không thay đổi.

Trả lời

4 user938271 Sep 21 2020 at 12:20

t_TIvà t_TElà các tùy chọn đầu cuối. Bạn có thể đặt chúng bằng các chuỗi sẽ được Vim gửi đến thiết bị đầu cuối khi phần sau được trả lại. đặt ở chế độ "thô" hoặc khi chuyển sang chế độ "thô".

Kể từ bản vá 8.1.2134 , Vim hỗ trợ một tính năng được gọi là modOtherKeys, được cung cấp bởi một số thiết bị đầu cuối như xterm. Nó cho phép Vim phân biệt các khóa khác nhau, như <C-i>từ <Tab>hoặc <M-h>từ è, điều mà trước đây không thể. Điều này đặc biệt hữu ích khi bạn muốn cài đặt ánh xạ trên một số khóa mà không làm tắc nghẽn khóa khác.

Tính năng này được bật theo mặc định trong 8.1.2194 . Bắt đầu từ bản vá này, khi Vim nghĩ rằng nó đang chạy trong xterm , nó sẽ tự động gửi chuỗi này đến thiết bị đầu cuối bất cứ khi nào sau đó được đưa vào chế độ thô:

^[[>4;2m

Cú pháp của chuỗi được ghi lại ở đây :

CSI > Pp ; Pv m

Mục đích của nó là đặt hoặc đặt lại các tùy chọn công cụ sửa đổi phím, mà thiết bị đầu cuối sẽ kiểm tra để quyết định xem nó có nên xây dựng các chuỗi thoát lưu giữ thông tin về các công cụ sửa đổi có thể được nhấn bằng một phím nhất định hay không.

CSIlà ESC [(hay còn gọi là Trình giới thiệu trình tự điều khiển). Tham số đầu tiên Pplà một mã xác định tài nguyên đầu cuối để đặt hoặc đặt lại. Tham số thứ hai Pvlà giá trị bạn muốn gán cho tài nguyên.

Trong trình tự của bạn, Ppđã được cung cấp giá trị 4, giá trị này xác định tài nguyên modOtherKeys (có các tài nguyên khác được xác định bởi các mã khác, chẳng hạn như modCursorKeys được xác định bởi 1).

Tương tự, Pvđã được cung cấp giá trị 2, cho thiết bị đầu cuối biết rằng tính năng này nên được bật cho tất cả các phím, bao gồm cả những phím có hành vi nổi tiếng (như Tab).

Để biết thêm thông tin, hãy xem:

  • :h modifyOtherKeys
  • man xterm(1) (tìm kiếm tài nguyên modOtherKeys)
  • Cơ sở về cách thức ra đời của modOtherKeys
  • Làm cách nào chương trình của tôi có thể phân biệt control-I với tab?
  • Làm cách nào để lập bản đồ với ?
  • Xung đột giữa khóa soạn hệ thống và ánh xạ meta khóa chế độ chèn

Điều đó sẽ bao gồm hầu hết những gì bạn không muốn biết.

Hiện nay:

Tôi chỉ muốn tạm ngừng hiển thị về chúng.

Nếu các trình tự chỉ được in trên thiết bị đầu cuối, điều đó có nghĩa là trình tự sau không hiểu chúng. Nếu nó không hiểu chúng, điều đó có nghĩa là nó không phải xterm (hoặc ít nhất là nó không tương thích hoàn toàn với xterm). Có 2 cách để khắc phục sự cố:

  1. yêu cầu Vim tắt tính năng ModOtherKeys để nó ngừng gửi các chuỗi đó
  2. sửa chữa của bạn TERMmà có thể là xtermhoặc một số phái sinh nhưxterm-256color

Tôi sẽ 2.đồng ý và ngừng nói với mọi chương trình đang chạy trong thiết bị đầu cuối rằng chương trình sau là xterm, khi thực sự không phải vậy, nhưng nếu bạn thích 1., chỉ cần thêm điều này vào vimrc của bạn:

set t_TI= t_TE=

Nếu bạn muốn sử dụng 2., hãy định cấu hình thiết bị đầu cuối gnome của bạn như sau:

  • mở Editmenu trong thanh ở đầu cửa sổ

  • bấm vào Profile Preferencesnút trong menu

  • nhấp vào Commandtab trong cửa sổ mới mở

  • viết điều này vào Custom commandtrường:

    /usr/bin/env TERM=gnome-256color /bin/bash
    

Đã thử nghiệm trên Ubuntu 16.04. Tôi không biết liệu chuỗi nhấp chuột cụ thể này có còn hoạt động trong phiên bản hệ điều hành gần đây hay không. Bạn cũng có thể muốn chọn một trình bao khác ngoài bash hoặc một đường dẫn khác /bin/bash.

Ngoài ra, hãy viết điều này trong một tệp shell init:

export TERM=gnome-256color

Nếu bạn cần mô tả từ khóa cập nhật cho thiết bị đầu cuối của mình, hãy thử cách này:

$ curl -LO http://invisible-island.net/datafiles/current/terminfo.src.gz $ gunzip terminfo.src.gz
$ tic -sx -e gnome-256color terminfo.src