Làm thế nào để tắt hoàn toàn màu sắc?


7

Bài gốc

Tôi đã có một màu sắc được cấu hình trong .vimrc của mình nhưng đôi khi tôi muốn tắt nó hoàn toàn, điều đó có nghĩa là tôi muốn Vim sử dụng màu nền và màu nền trước của thiết bị đầu cuối.

Vấn đề của tôi là tôi không biết làm thế nào để dễ dàng làm điều đó. Khi tôi sử dụng :syntax offVim sẽ tắt hầu hết màu của nó nhưng nó không xóa màu con trỏ. Nó không thay đổi màu nền thành màu mặc định của thiết bị đầu cuối.

Có một lệnh như :nocolorschemehoặc vim -u NONEnhưng chỉ cho màu sắc?

Tôi nhận thức được thực tế rằng tôi có thể tạo một tệp .vimrc tùy chỉnh và tải nó với -utùy chọn. Tôi đang tìm kiếm một giải pháp dễ dàng hơn mặc dù.

Cập nhật lớn

Vì bạn đã gợi ý cho tôi một số lệnh và cách tiếp cận khác nhau, tôi quyết định cho bạn xem một số hình ảnh của màn hình sau khi gọi các lệnh đó.

Môi trường đầu cuối

Tôi sử dụng thiết bị đầu cuối st (1) từ mút.org với một cấu hình tùy chỉnh để tôi có defaultfg = 10(màu xanh lá cây tươi sáng) và defaultbg = 0(màu đen). Tôi đang chạy phiên bản GNU / Linux mà PocketC.HIP cung cấp ( uname -akết quả là chip Linux 4.3.0-ntc # 1 SMP Thứ Tư, ngày 11 tháng 5, 21:30:30 UTC 2016 arm7l GNU / Linux ).

Ảnh chụp màn hình

  1. Không có màu sắc (đây là những gì tôi muốn)

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

    Đây là những gì tôi muốn đạt được mà không cần phải bắt đầu Vim với vim -u NONE.

  2. Màu bình thường

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

    Tôi nhận được những màu này khi:

    • Tôi thường bắt đầu Vim của tôi (đây là màu sắc tiêu chuẩn của tôi).
    • Tôi gọi :set t_Co=0.
      Điều đáng chú ý là nó không thay đổi bất cứ điều gì khi tôi sử dụng màu sắc monokai tùy chỉnh của mình. Nó không thay đổi giao diện trong màu sắc mặc định như bạn có thể thấy trong 5.

      Điều buồn cười là đầu ra của :verbose set t_Co?gọi sau đó là t_Co=256mà chỉ ra rằng literaly gì đã thay đổi.

    • Tôi bắt đầu Vim với TERM=xterm vim.

  3. Màu mặc định

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

    Tôi nhận được những màu này khi:

    • Tôi gọi :colorscheme default.
  4. Vim đã loại bỏ hầu hết các màu nhưng không rơi vào mặc định của thiết bị đầu cuối

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

    Tôi nhận được nó sau:

    • Gọi điện thoại :syntax off.
  5. Hầu như không có màu sắc

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

    Tôi nhận được điều này sau khi chạy 4 lệnh này lần lượt:

    " The effect is more visible on the default colorscheme 
    " than on my molokai colorscheme.
    :set t_Co=0
    :colorscheme default
    :hi clear
    

    Khi tôi chạy :hi LineNrsau đó tôi nhận được:

     LineNr          XXX term=underline ctermfg=6 guifg=Brown
    
  6. Chuỗi và loại được gạch chân trong tệp nguồn C

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

    Sau khi áp dụng :set term=vt100.

  7. Vẽ lại bị hỏng trong Vim

    Hình thu nhỏ video
    Vim bị hỏng sau khi gọi: set term = buildin_dumb (video)

    Sau khi áp dụng :set term=builtin_dumbVim của tôi quên cách vẽ lại các dòng khi tôi di chuyển xung quanh bằng cách sử dụng jk.

  8. Kiểm tra mặc định của temrminal của tôi

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

    Đây là những gì tôi nhận được sau khi chạy echo -e " \033[0;4mfoo\033[0;0mbar"trong thiết bị đầu cuối của tôi.


3
Tôi nghĩ rằng bạn mô tả hai điều khác nhau: Nếu bạn muốn tắt màu sắc, bạn sẽ không có màu thiết bị đầu cuối của mình mà là màu mặc định của vim. Nếu bạn muốn có màu thiết bị đầu cuối của mình trong vim, bạn sẽ phải tìm (hoặc tạo) một bảng màu phù hợp với màu của thiết bị đầu cuối của bạn.
statox

@statox OK, tôi chỉ nghĩ rằng khi tôi chạy vim -u NONEnó sẽ thừa hưởng mặc định của thiết bị đầu cuối. Cảm ơn đã chỉ ra rằng.
Mateusz Piotrowski

Nếu chỉ đơn giản như vậy thì tôi nghĩ nhiều người sẽ rất vui ;-) Nhưng tôi nghĩ ít nhất là không thể vì lý do: 1) không phải tất cả các thiết bị đầu cuối đều xác định màu của họ giống như cách 2) Vim có màu riêng. cơ chế hầu như không tương thích với các cơ chế hiện có cho thiết bị đầu cuối. Bây giờ tôi thực sự không phải là một chuyên gia về tùy chỉnh màu sắc nên có thể một bậc thầy về màu sắc sẽ có thể cụ thể hơn hoặc sẽ biết một cách :-)
statox

1
Tôi đã cập nhật câu trả lời của mình vào tài khoản để gạch chân. Tôi nên rõ ràng hơn một chút trong nhận xét trước đây của mình: Tôi hiểu rằng cài đặt t_Co dường như có các hiệu ứng khác nhau tùy thuộc vào bảng màu của bạn, mặc dù tôi không biết cơ chế này có thể xảy ra. Một điều nữa để thử: Khi sử dụng monokai, hãy chạy :set t_Co=0, ngay sau đó :verbose set t_Co?là t_Co được đặt thành gì? (Tôi tự hỏi liệu bằng cách nào đó nó không được đặt chính xác: tôi chỉ đoán rằng có thể bạn đã có một chế độ tự động đặt lại nó hoặc có một lỗi khiến nó không được đặt.)
Rich

1
Được rồi, bí ẩn đã được giải quyết: hãy xem bản cập nhật của tôi về lý do tại sao :set t_Co=0không hoạt động khi colorcheme được đặt thành monokai.
Giàu

Câu trả lời:


6

Vô hiệu hóa màu sắc hoàn toàn

Nếu bạn muốn Vim không sử dụng màu sắc ở tất cả , bạn chỉ cần chạy lệnh:

:set t_Co=0

Điều này cho Vim biết rằng nó đang chạy trong một thiết bị đầu cuối không hỗ trợ màu sắc, vì vậy Vim sẽ chỉ xuất văn bản đen trắng (sau đó sẽ được thiết bị đầu cuối của bạn hiển thị theo màu mặc định).

Tuy nhiên, lưu ý rằng sau khi thay đổi t_Cocài đặt, các màu hiện tại được tải lại (để nó có thể thực hiện các thay đổi phù hợp với các màu mà nó xác định). Bảng màu "monokai" bạn đang sử dụng bắt đầu với dòng :set t_Co=256, ngay lập tức đặt lại tùy chọn.

Tôi cho rằng đây là hành vi không chính xác và nên được coi là một lỗi với người duy trì màu sắc đó. Tất nhiên, họ cũng có thể không đồng ý và lập luận rằng vì màu sắc của họ yêu cầu 256 màu, nên không nên thử và sử dụng nó trong một thiết bị đầu cuối không hỗ trợ điều này (và dòng này giúp monokai hoạt động chính xác khi Vim đang chạy một thiết bị đầu cuối được cấu hình không chính xác).

Dù bằng cách nào, bạn sẽ cần thay đổi màu sắc khỏi monokai trước khi đặt t_Cotùy chọn, như bạn đã phát hiện ra.

Hạn chế màu sắc đối với những màu thường được sử dụng trong Shell

Màu sắc mà Vim sử dụng cho đầu ra của nó có thể được xác định và xem bằng :highlightlệnh. Chạy :highlight clearsẽ đặt lại các giá trị này thành mặc định của Vim (hiệu quả tương tự như đang chạy :colorscheme defaults)

Trích từ :help :highlight:

:hi[ghlight] clear        Reset all highlighting to the defaults.  Removes all  
                          highlighting for groups added by the user!
                          Uses the current value of 'background' to decide which
                          default colors to use.

(NB Lưu ý nhận xét về 'background'tùy chọn.)

Nếu điều này không tạo ra đầu ra mà bạn mong muốn, bạn có một vài lựa chọn.

  1. Nếu bạn hiện đang sử dụng Vim ở chế độ 256 màu, bạn có thể thử sử dụng chế độ 16 màu thay vào đó, vì điều này sẽ dẫn đến việc Vim chọn từ bảng màu mà bạn có thể nhìn thấy khi ở trong vỏ.

    Cách rõ ràng để làm điều này là chạy Vim với một bộ biến $ TERM khác nhau. Giá trị bạn cần sử dụng phụ thuộc vào thiết bị đầu cuối của bạn, nhưng, ví dụ, nếu bạn $TERMthường sử dụng xterm-256color, thì việc chạy vim bằng lệnh sau sẽ thực hiện thủ thuật:

    TERM=xterm vim
    

    (Bạn cũng có thể đạt được hiệu ứng tương tự theo kiểu hacky hơn bằng cách đặt tùy chọn đầu cuối trực tiếp bên trong vim : :set t_Co=16.)

  2. Ngoài ra, nếu đó chỉ là một số ít các mặt hàng cụ thể được tô màu không chính xác, bạn có thể thay đổi màu sắc của các mặt hàng đó bằng :highlightlệnh. ví dụ: để loại bỏ màu nền từ dòng con trỏ:

    :highlight CursorLine ctermbg=NONE
    

    Nếu bạn không chắc chắn mình cần thay đổi nhóm nào, bạn có thể chỉ chạy :highlightmà không có đối số hoặc bạn có thể chạy: :so $VIMRUNTIME/syntax/hitest.vimđể mở một cửa sổ mới hiển thị tất cả các tô sáng hiện tại.

    Xem các phần ở dưới cùng của câu trả lời này để biết các mẹo về cách thực hiện việc này nhanh chóng bằng lệnh tùy chỉnh hoặc bằng cách thiết lập bảng màu mới.

Xóa màu nền (BCE)

Nếu bạn gặp vấn đề với nền trông khác khi nó chứa văn bản, bạn có thể gặp BCE (Xóa màu nền). Bạn có thể vô hiệu hóa điều này bằng lệnh:

:set t_ut=

Có một câu hỏi cụ thể về vấn đề này ở đây , và vấn đề được đề cập chi tiết hơn trong bài đăng trên blog này .

Cập nhật (Ghi đè gạch chân):

Từ cuộc thảo luận của chúng tôi trong các bình luận, có thể thấy rõ một trong những vấn đề bạn gặp phải là thiết bị đầu cuối của bạn hiển thị văn bản được gạch chân trong một màu khác. Bạn có hai lựa chọn để giải quyết vấn đề này:

  1. Sửa cấu hình thiết bị đầu cuối của bạn để nó hiển thị văn bản được gạch chân trong cùng một màu! Tôi không thể giúp bạn với điều này.

  2. Tắt phần gạch chân trong Vim. Bạn có thể làm điều này bằng :highlightlệnh: ví dụ sau đây sẽ xóa tất cả màu / định dạng khỏi số dòng:

    :highlight LineNr NONE
    

Tắt màu bằng lệnh

Để thực hiện việc này nhanh chóng, bạn có thể thiết lập một lệnh để thực hiện tất cả các bước cần thiết trong một lần:

 function! TurnOffColors()
   :set t_Co=0
   :highlight LineNr NONE
   :highlight CursorLine NONE
   " Add any other necessary highlight lines here
 endfunction

 command! TurnOffColors call TurnOffColors()

Tạo một cái mới colorscheme

Ngoài ra, bạn có thể tạo một bảng màu mới "NoColorsNoUnderlines" nơi bạn tắt gạch chân nếu thích hợp. Để được hướng dẫn cách thực hiện việc này, hãy chạy lệnh:

:edit $VIMRUNTIME/colors/README.txt

Bạn có thể sử dụng màu sắc đen trắng này làm điểm bắt đầu.


Có vẻ như nó chỉ thiết lập colorscheme default. Cùng với syntax offnó là gần như những gì tôi mong muốn. Ngoại trừ (1) đường con trỏ vẫn gạch dưới dòng hiện tại và tô màu trắng; (2) số dòng vẫn được tô màu.
Mateusz Piotrowski

1
@MateuszPiotrowski Tôi đã mở rộng câu trả lời của mình một chút, hy vọng sẽ có ích. Lưu ý rằng trừ khi bạn tắt hoàn toàn màu sắc, thực sự không có ý nghĩa gì khi nói rằng bạn không muốn Vim sử dụng bảng màu. Vim hiển thị các thứ trên màn hình, và nó phải sử dụng một số màu. Các màu sắc được xác định bởi các màu sắc.
Giàu

@MateuszPiotrowski "LineNr" là cài đặt nổi bật ảnh hưởng đến màu sắc của các số dòng.
Giàu

3
Trên thực tế, đọc lại câu hỏi của bạn, có vẻ như có thể bạn làm chỉ muốn tắt các màu sắc hoàn toàn. :set t_Co=0sẽ làm điều đó cho bạn.
Giàu

Không có tùy chọn nào trong số này hoạt động như tôi mong đợi. vim -u NONEbắt đầu với nền và tiền cảnh của thiết bị đầu cuối nhưng nó không tải bất kỳ vimrc nào. Tôi tự hỏi tôi nên vô hiệu hóa những gì để có được hiệu ứng này.
Mateusz Piotrowski

2

set t_Co=0phá vỡ một số tính năng Vim nhất định, thích ^X^Ovà vẫn sử dụng tô sáng thuật ngữ cơ bản (đậm, gạch chân).

Bạn có thể sử dụng một cái gì đó như nofrils và điều chỉnh hi Normal cterm=none ctermfg=none ctermbg=none. Ngoài ra, tôi không thấy cách nào khác, mà không làm hỏng trải nghiệm Vim của bạn.

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.