การแมปโหมดแทรกความไวตามบริบทหรือตัวย่อ


10

ฉันวางแผนที่จะใช้การแมปอรรถประโยชน์สำหรับปลั๊กอิน LaTeXของฉันเพื่อทำให้การพิมพ์ทางคณิตศาสตร์ง่ายขึ้น ตัวอย่างเช่นฉันต้องการสร้างตัวย่อที่คล้ายกับ

`a : \alpha
`b : \beta
-> : \to
=> : \Rightarrow

และคล้ายกัน ฉันต้องการ (บางส่วน) การแมปเท่านั้นที่จะสามารถใช้งานได้ในสภาพแวดล้อมทางคณิตศาสตร์ไม่ใช่ด้านนอก

ฉันรู้ว่าฉันสามารถรับรู้สภาพแวดล้อมทางคณิตศาสตร์ผ่านกลุ่มไวยากรณ์คือและtexMathZoneE texMathZoneXอย่างไรก็ตามฉันไม่ทราบวิธีใช้สิ่งนี้เพื่อทำการแมปตามบริบทหรือตัวย่อ

คำตอบ:


5

อาจจะเป็นเช่นนี้:

let s:TeXmaps = {
    \ '`a': '\alpha',
    \ '`b': '\beta',
    \ '->': '\to',
    \ '=>': '\Rightarrow' }

function! <SID>IsTeXMath()
    return &ft ==# 'tex' && match(map( synstack(line('.'), col('.')), 'synIDattr(v:val, "name")' ), '\m^texMathZone[EX]$') >= 0
endfunction

for s:k in keys(s:TeXmaps)
    silent! exec 'inoremap <silent> ' . s:k . ' <C-r>=<SID>IsTeXMath()?' . string(s:TeXmaps[s:k]) . ':' . string(s:k) . '<CR>'
endfor

มันอาจจะดีกว่าที่จะใช้ตัวย่อบัฟเฟอร์ท้องถิ่นเพียง tex FILETYPES 'filetype'แทนการย่อโลกว่าการตรวจสอบ
Peter Rincker

@ Peter Rincker: ใช่มันเป็นเพียงหลักฐานของแนวคิด มันสามารถปรับให้เหมาะสมในหลาย ๆ วิธีโดยการหา ID ตัวเลขสำหรับtexMathZoneEและtexMathZoneXก่อน
lcd047

3

lh-bracketsจัดMap4TheseContexts()ทำหน้าที่ที่ดูแลการตรวจสอบบริบทเพื่อทำสิ่งต่าง ๆ

" To be defined in a tex ftplugin -> ~/.vim/ftplugin/tex/your-shortcuts.vim
:inoremap <buffer> <silent> `a <c-r>=Map4TheseContexts('`a', 'texMathZone', '\\alpha', '`a')<cr>
" or:
:inoremap <buffer> <silent> <expr> `a Map4TheseContexts('`a', 'texMathZone', '\\alpha', '`a')

หมายเหตุ: หากคุณติดตั้งลาเท็กซ์สวีทคุณจะต้องใช้IMAP()ฟังก์ชั่นในการกำหนดการแมปใหม่ของคุณเพราะนี่คือลาเท็กซ์สวีทค่อนข้างน่ารำคาญเกี่ยวกับการแมป


ฉันกำลังพัฒนาปลั๊กอิน LaTeX ของตัวเอง (ดูลิงก์ในคำถาม) ฉันพบว่าชุดยางพาราเป็นวิธีที่ซับซ้อนและล่วงล้ำโดยทั่วไป ฟังก์ชั่น IMAP นั้นไม่ได้แย่ขนาดนั้นถึงแม้ว่าฉันจะชอบใช้บางอย่างเช่น UltiSnips แทนตัวอย่างที่ซับซ้อน
Karl Yngve Lervåg

1
IMAP()เป็นเรื่องที่น่าสนใจในการกำหนดการแมป แต่การแมปนั้นยากที่จะรักษามากกว่าตัวอย่าง / เทมเพลต
Luc Hermitte
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.