簡體   English   中英

功能上的狀態行突出顯示組無效

[英]statusline highlight group from function has no effect

在我的vim配置中,我有一個類似的功能

function! StatuslineTrailingSpace()
  if !exists('b:statusline_trailing_space_warning')
    let b:statusline_trailing_space_warning = &modifiable ? search('\s\+$', 'nw') != 0 ? ' %#warningmsg#[\s]%*' : '' : ''
  endif

  return b:statusline_trailing_space_warning
endfunction

然后在行的后面

set statusline+=%{StatuslineTrailingSpace()}

但是,我看到的是完整的%#warningmsg#[\\s]%*字符串,而不是狀態%#warningmsg#[\\s]%*的彩色[\\s]標簽。

嘗試使用%! 而不是這個答案中提出的%{}似乎不起作用,因為我的vim給出了錯誤

line   70:
E539: Illegal character <!>: statusline+=%!StatuslineTrailingSpace()

如何使有色狀態欄起作用?

我懷疑您必須使用%! 構造以獲得對緩沖區的訪問。 但是,由於文檔暗示該%! 必須從選項的開頭開始,最好的選擇是保存當前狀態欄,然后使用函數返回整個內容。

function! StatuslineTrailingSpace()
  if !exists('b:statusline_trailing_space_warning')
let b:statusline_trailing_space_warning = &modifiable ? search('\s\+$', 'nw') != 0 ? ' %#warningmsg#[\s]%*' : '' : ''
  endif

  return s:former_status_line . b:statusline_trailing_space_warning
endfunction

let s:former_status_line = &statusline
set statusline=%!StatuslineTrailingSpace()

這樣的東西?

高亮組應位於'statusline'選項中,而不應位於表達式中:

function! StatuslineTrailingSpace()
  if !exists('b:stsw')
    let b:stsw = &modifiable ? search('\s\+$', 'nw') != 0 ? ' [\s]' : '' : ''
  endif

  return b:stsw
endfunction

set statusline+=%#warningmsg#%{StatuslineTrailingSpace()}%*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM