4

vimでは、略語で正規表現を使用できますか? たとえば、次のようなもの

:iab \([0-9]\{-}\)nm \\SI{\1}{\\nano\\meter}

たとえば、「50nm」のすべてのインスタンスを「\SI{50}{\nano\meter}」に展開します。

4

2 に答える 2

2

あなたの最善の策は、小さなヘルパー関数を自分自身に書くことです。オムニ補完またはユーザー定義補完 ( C-x C-u、 を参照:help 'cfu') を利用することをお勧めします。キーに imap する通常の関数をスケッチしました。

function! ExpandNanometers()
    let items = matchlist(expand('<cword>'), '\v(\d+)nm')
    if len(items) == 0
        return 
    endif
    let modified = '\SI{' . items[1] . '}{\nano\meter}'
    exec "normal! ciw" . modified
endf
imap <C-l> <C-o>:call ExpandNanometers()<CR>

おそらく最高のコードではありません。insert-mode にバインドされており、カーソルが単語上またはその直後にある場合、 the desiredC-lなどの単語を置き換えます。50nm

于 2013-01-16T18:02:11.557 に答える
1

これを前の回答にコメントとして追加したかったのですが、どうやら50担当者までできないようです。また、これは遅すぎることも知っていますが、参考までに:

キーマッピングが受け入れられる場合(前の回答に従う)、確かに次のようなものです

imap <silent> <leader>obscure-key-of-choice <Esc>:%s/\v(\d+)nm/\\SI{\1}{\\nano\\meter}/g<CR>``i

(つまり、ファイル全体を目的のパターンでグローバルに置き換える) のほうが維持しやすいでしょうか? .vimrc の読みやすさ/メンテナンスのために、vimscript は避けたいです! obscure-key-of-choice明らかに、選択したあいまいなキーに置き換えます。いずれにせよ、すべてのテキストを入力した後は 1 回だけ実行する必要があるため、他のキーは、従来よりも便利なバインディング用に保存しておくことをお勧めします。

ショートカットは次のようなものを置き換えます

50nm blabla 73nm your-interesting-science-here 89nm
... some new lines...
we love nanometers nm! 34nm and finally 18nm

のようなもので

\SI{50}{\nano\meter} blabla \SI{73}{\nano\meter} your-interesting-science-here \SI{89}{\nano\meter}
... some new lines...
we love nanometers nm! \SI{34}{\nano\meter} and finally \SI{18}{\nano\meter}
于 2014-05-05T00:28:15.813 に答える