Как проверить, имеет ли опция значение по умолчанию в Vim? - PullRequest
0 голосов
/ 12 мая 2018

Я хочу set directory в моем .vimrc только , если он не был изменен в общесистемном файле vimrc. Есть какой-нибудь краткий способ проверить, имеет ли опция значение по умолчанию?

Что-то вроде:

if is_default(&directory)
   set directory^=~/path/to/dir//

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Определите следующую функцию:

function! Is_default(opt)                                                       
  execute "let tmp = &".a:opt                                                   
  redir => l:default                                                            
  execute "set ".a:opt."&"                                                      
  silent execute "echo &".a:opt                                                 
  redir end                                                                     
  if tmp==l:default[1:]                                                         
    return 1                                                                    
  else                                                                          
    execute "set ".a:opt."=".tmp                                                
    return 0                                                                    
  endif                                                                         
endfunction                                                                     

Теперь вы можете проверить, имеет ли formatoptions значение по умолчанию:

if Is_default("fo")                                                             
  echo "Option has default value"                                                                  
endif   
0 голосов
/ 12 мая 2018

Я не знаю простого способа получить значение по умолчанию для опции.Единственный известный мне способ - сохранить текущее значение, сбросить параметр по умолчанию, сохранить значение по умолчанию и восстановить исходное значение.

function! IsDefault(option)
    " Get the current value
    exe "let l:save_value = &" . a:option
    " Reset to default
    exe "set " . a:option . "&"
    " Get the default value
    exe "let l:save_default = &" . a:option
    " Restore original value
    exe "set " . a:option . "=" . l:save_value
    return l:save_value == l:save_default
endfunction

Дополнительная подзадача состоит в том, что восстановление для строковых / числовых и логических параметров отличается- для логического варианта восстановление должно быть

    if l:save_value
        exe "set " . a:option
    else
        exe "set no" . a:option
    endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...