यह एक बहुत ही रोचक सवाल है, लेकिन मुझे यकीन नहीं है कि आपका सुझाया गया दृष्टिकोण सबसे अच्छा तरीका है! मैंने एक जवाब का प्रयास किया है, लेकिन यह पहला पुनरावृत्ति सही नहीं हो सकता है। मुझे लगता है कि एक लाटेक्स पर्यावरण \begin
और \end
कमांड द्वारा सीमित है (मेरा लाटेक्स थोड़ा जंगली है!)।
सबसे पहले आपको कर्सर की स्थिति के वातावरण को वापस करने के लिए एक फ़ंक्शन की आवश्यकता है।नीचे मेरा कार्य पिछले \begin
कमांड पर कूदता है, फिर \end
कमांड से आगे बढ़ता है, यह गणना करता है कि कर्सर इस क्षेत्र के अंदर है या नहीं, और जब तक कोई वातावरण नहीं मिलता है तब तक प्रक्रिया जारी रखती है। यह नेस्टेड वातावरण को संभालना चाहिए। यदि लाटेक्स पर्यावरण में नहीं है, तो खाली स्ट्रिंग लौटा दी जाती है।
function! GetTeXEnv()
let pos = getpos('.')
let win = winsaveview()
let env = ''
let carry_on = 1
let search_ops = 'bWc'
let b_start = line('.')
while carry_on
keepjumps let b_start = search('\\begin{',search_ops)
let search_ops = 'bW'
" Only accept a match at the cursor position on the
" first cycle, otherwise we wouldn't go anywhere!
let env = matchstr(getline('.'),'\\begin{\zs.\{-}\ze}')
let env_esc = escape(env,'*')
keepjumps let b_end = search('\\end{\s*' . env_esc . '\s*}','Wn')
if b_start == 0
" finished searching; stop
let carry_on = 0
elseif b_end > b_start && b_end < pos[1]
" not inside this env; carry on
let env = ''
elseif b_end > b_start && b_end >= pos[1] && b_start <= pos[1]
" found it; stop
let carry_on = 0
endif
endwhile
call setpos('.',pos)
call winrestview(win)
return env
endfunction
अब आप कर्सर :echo GetTeXEnv()
का उपयोग करने का वातावरण पूछताछ कर सकते हैं।
=
कुंजी के व्यवहार को बदलने के लिए, आप अन्यथा एक और समारोह जो संरेखित वातावरण में &=
देता है, और =
बनाने की जरूरत:
function! TeXEquals()
return GetTeXEnv() =~ 'align\*\?' ? "&=" : "="
endfunction
तो फिर तुम टेक्स फ़ाइलों के लिए डालने मोड में =
(पुन: मैप कर सकते हैं केवल)
autocmd FileType tex inoremap <silent> = <c-r>=TeXEquals()<CR>
यह मेरे उदाहरण LaTeX फ़ाइल में काम करता प्रतीत होता है। अगर आपको कोई समस्या आती है, या सुधार के लिए कोई विचार है तो मुझे बताएं।
स्रोत
2012-08-06 18:33:10
मैंने लाटेक्स निर्दिष्ट करने के लिए शीर्षक संपादित किया है, अन्यथा यह एक बहुत व्यापक प्रश्न होगा। कोड वातावरण का पता लगाने की विधि भाषा से भाषा में नाटकीय रूप से भिन्न होगी। –