Bối cảnh ánh xạ chế độ chèn nhạy cảm hoặc viết tắt


10

Tôi đang lên kế hoạch triển khai một số ánh xạ tiện ích cho plugin LaTeX của mình để đơn giản hóa việc gõ toán học. Chẳng hạn, tôi muốn tạo các chữ viết tắt tương tự như

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

Và tương tự. Tôi muốn (một số) ánh xạ chỉ có sẵn trong môi trường toán học, chứ không phải bên ngoài.

Tôi biết rằng tôi có thể nhận ra môi trường toán học thông qua các nhóm cú pháp, nghĩa là texMathZoneEtexMathZoneX. Tuy nhiên, tôi không biết làm thế nào để sử dụng điều này để tạo ra các ánh xạ hoặc chữ viết tắt theo ngữ cảnh.

Câu trả lời:


5

Có lẽ như thế này:

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

Có lẽ sẽ tốt hơn nếu sử dụng các chữ viết tắt bộ đệm cục bộ trên các kiểu tệp tex thay vì viết tắt toàn cục mà kiểm tra 'filetype'.
Peter Rincker

@Peter Rincker: Vâng, đó chỉ là một bằng chứng về khái niệm. Nó có thể được tối ưu hóa theo nhiều cách, bằng cách tìm ID số cho texMathZoneEtexMathZoneXtrước.
lcd047

3

lh-ngoặc cung cấp Map4TheseContexts()chức năng đảm nhiệm việc phát hiện bối cảnh để làm những việc khác nhau.

" 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')

Lưu ý: Nếu bạn đã cài đặt bộ phần mềm latex, thay vào đó, bạn sẽ phải sử dụng IMAP()chức năng của nó để xác định ánh xạ mới của mình - điều này là do bộ phần mềm latex khá xâm phạm về ánh xạ.


Tôi đang phát triển plugin LaTeX của riêng mình (xem liên kết trong câu hỏi). Tôi đã tìm thấy latex-suite là cách phức tạp và xâm nhập nói chung. Chức năng IMAP không tệ lắm, mặc dù tôi thích sử dụng cái gì đó như UltiSnips cho các đoạn phức tạp.
Karl Yngve Lervåg

1
IMAP()thật thú vị khi xác định ánh xạ, nhưng ánh xạ khó bảo trì hơn các đoạn / mẫu.
Luc Hermitte
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.