状況依存の挿入モードのマッピングまたは省略形


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ファイルタイプだけでバッファローカルな省略形を使用するほうがよいでしょう'filetype'
Peter Rincker、2015年

@ピーター・リンカー:はい、それは単なる概念の証明です。それは、多くの方法、のための数値IDを見つけることによって、Fiを最適化することができるtexMathZoneEtexMathZoneX事前。
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')

注:latex-suiteをインストールした場合は、代わりにそのIMAP()関数を使用して新しいマッピングを定義する必要があります-これは、latex-suiteがマッピングに関して非常に煩わしいためです。


私は自分のLaTeXプラグインを開発しています(質問のリンクを参照)。ラテックススイートは、一般的に複雑で煩わしい方法です。IMAP機能はそれほど悪くありませんが、複雑なスニペットには代わりにUltiSnipsのようなものを使用することを好みます。
Karl YngveLervåg15年

1
IMAP()マッピングを定義することは興味深いものでしたが、マッピングはスニペット/テンプレートよりも維持するのが困難です。
Luc Hermitte、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.