Tôi cần một cách đơn giản (hoặc phức tạp) để tìm ra chế độ người dùng đang ở. Tôi cần biết liệu người dùng có ở chế độ Bình thường, Chèn, Trực quan, Thay thế, Thay đổi, v.v.Vim: Cách phát hiện chế độ mà người dùng ở trong trạng thái nào?
Tôi biết mode()
chức năng, tuy nhiên tôi không thể tìm ra cách để làm cho nó đầu ra một chuỗi đầy đủ thay vì chỉ một ký tự.
Kế hoạch của tôi là tạo một chức năng tự động thay đổi màu nền và màu nền trước của dòng trạng thái tùy thuộc vào chuỗi trả về mode()
. Về cơ bản một chức năng với một loạt các ifs và elseifs mà sẽ làm điều đó cho tôi. Có một lỗ hổng với cách tiếp cận này mặc dù, tôi không thể biết màu sắc thiết lập chủ đề theo mặc định cho điều đó.
Vì vậy, về cơ bản, tôi cần một số lời khuyên/giúp đỡ về cách làm cho một chức năng nào sau đây:.
- Knows chế độ mà người sử dụng đang ở Phần còn lại của các chức năng phản ứng khác nhau mỗi lần thay đổi này.
- Đặt một số biến với các giá trị
fg
vàbg
phản ánh những gì chủ đề hiện tại đã đặt cho chúng. - Thay đổi nền trước và nền của dòng trạng thái tùy thuộc vào các giá trị này.
Tôi đã thử làm điều đó, nhưng đó là một cách rất thô lỗ khi thực hiện nó và nó không hoạt động chút nào. Nó chỉ thiết lập màu sắc một lần và sau đó nó không phản ứng mỗi khi nó thay đổi.
Cảm ơn sự giúp đỡ của bạn! :)
EDIT:
Khá chắc chắn những gì tôi đã cố gắng trước đó không làm việc được điều này:
function! StatuslineModeColor()
let s:StatuslineMode=mode()
if s:StatuslineMode == 'n'
hi Statusline ctermbg=blue guibg=blue
elseif s:StatuslineMode == 'i'
hi Statusline ctermbg=red guibg=red
endif
endfunc
Và trong statusline tôi đặt như sau:
let &stl.='%{StatuslineModeColor()}'
EDIT 2:
Tôi đã tìm ra rằng về cơ bản những gì tôi cần làm là tìm cách lấy bất kỳ màu nào s chủ đề đã được sử dụng trước đây. Đó là nếu tôi sử dụng giải pháp này: http://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5
Tuy nhiên giải pháp này không lý tưởng trong tiêu chuẩn của tôi, vì nó không sạch sẽ hoặc sạch sẽ vì nó có thể gây ra nhiều lộn xộn. :/
@romainl Xong, quên thêm điều đó. :) Nó không phải là chức năng chính xác tôi đã sử dụng trước đây, nhưng nó khá gần. – greduan
@romainl Tôi dường như đã tìm thấy một phiên bản Reddit tốt về điều này: http://www.reddit.com/r/vim/comments/gexi6/a_smarter_statusline_code_in_comments/c1n2oo5 Chỉ có vấn đề với điều này là nó không lấy các giá trị từ bản thân chủ đề, những gì có thể là một cách tốt để làm điều đó? – greduan
1. Bạn cần 'mode()' để xuất chuỗi đầy đủ? 2. Biến script-local làm gì trong hàm của bạn? Nó phải là một địa phương ('l:' hoặc không có gì thay cho 's:'). – ZyX