2013-02-21 59 views
1

我試圖切換自動格式在VIM(例如用fo+=a啓用如果未啓用,禁用與fo-=a其他方式)與單一熱鍵綁定像這樣:如何在vim中使用單個keybind切換自動格式化?

nnoremap <leader>a "magic goes here" 

我想過用一些存在的用條件來檢查,但我找不到任何東西。我怎樣才能做到這一點?

+1

哇。人們,vim問題屬於SO。特別是那些談論腳本的人,顯然。見http://meta.stackexchange.com/questions/25925/vim-questions-do-they-belong-to-stack-overflow-or-super-user – sehe 2013-02-21 22:16:49

回答

3

這是我會怎麼做:

function! ToggleAutoFormat() 
    if -1==stdridx(&fo, 'a') 
     set fo+=a 
    else 
     set fo-=a 
    endif 
endfunction 

nnoremap <leader>a :call ToggleAutoFormat() 
+3

哦,一個班輪:'nnoremap a:exe'set fo'。(&fo =〜'a'?' - ':'+')。'= a'' – 2013-02-21 22:19:47

+0

@Daan kudos!我沒有'=〜'操作員記憶!我在http://superuser.com/a/339595/75721上做了一個類似於bool設置的類似oneliner技巧,如果你感興趣的話:) – sehe 2013-02-21 22:26:48

+0

@Daan謝謝你們兩位,我現在會用一個班輪。 – none 2013-02-21 22:30:01

2

的法寶是 '&' 在下面

的片段:幫助EXPR選項

nnoremap <leader>a call ToggleFormat() 

function! toggleFormat() 
     if &formatoptions !~ 'a' 
      set fo+=a 
     else 
      set fo-=a 
     endif 
    return 0 
endfunction 
+0

對於sehe答案更清晰的'!〜'版本+1。有趣的是你在條件和'fo'裏面使用'formatoptions'。 btw什麼'返回0'呢? – none 2013-02-21 22:31:50

+0

return 0在這種情況下不做任何事情。但是,您可以將回報放在各種條件中,並將狀態結果解釋爲其他用途(例如,返回1表示「我已打開」)。把它包括在內我只是一個習慣,我必須讓這個函數成爲一個僞程序。 – Lighthart 2013-02-21 22:33:52