Vim でこのようなスクリプトを作成しようとしていますが、一連の疑問が生じます。きっと可能です。
のように数字の後に大文字の F を挿入する88F
と、Vim に自動的に変換してもらいたいと思い88°F (31°C)
ます。
そのようなインライン展開をトリガーする最良の方法は何ですか? そして、計算を実行する最良の方法は?
Vim でこのようなスクリプトを作成しようとしていますが、一連の疑問が生じます。きっと可能です。
のように数字の後に大文字の F を挿入する88F
と、Vim に自動的に変換してもらいたいと思い88°F (31°C)
ます。
そのようなインライン展開をトリガーする最良の方法は何ですか? そして、計算を実行する最良の方法は?
: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ます。
<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'))