0

Vim でこのようなスクリプトを作成しようとしていますが、一連の疑問が生じます。きっと可能です。

のように数字の後に大文字の F を挿入する88Fと、Vim に自動的に変換してもらいたいと思い88°F (31°C)ます。

そのようなインライン展開をトリガーする最良の方法は何ですか? そして、計算を実行する最良の方法は?

4

2 に答える 2

1
:imap F <ESC>ciw<C-R>=printf('%d°F (%d°C)', str2nr(@"), float2nr((str2nr(@")-32)/1.8))<CR>

まで拡大88Fします88°F (31°C)insert-mode

注:文字を入力する場合はF、 を押しCtrl-VFます。

于 2011-12-17T18:31:17.693 に答える
1

<C-v>Fこれは、使用を強制せず、レジスタに触れない@kev の回答のリファクタリングです。

inoremap <expr> F ((col('.')>1 && getline('.')[col('.')-2]=~#'^\d$')?(printf(' °F (%d °C)', float2nr((matchstr(getline('.')[:(col('.')-2)], '\d\+$')-32)/1.8))):('F'))

imap正確な理由が分からない限り、使用してはならないことに注意してください。

更新: 小数点としてドットを使用すると仮定すると、科学的表記法や一般的な (プログラミング言語の) のような切り捨ては使用しないで.1==0.1ください10.==10.0

inoremap <expr> F ((col('.')>1 && getline('.')[col('.')-2]=~#'^\d$')?(printf(' °F (%.1g °C)', (str2float(matchstr(getline('.')[:(col('.')-2)], '\v\-?\d+(\.\d+)?$'))-32)/1.8)):('F'))
于 2011-12-17T22:47:49.050 に答える