ども、Vimゴリラです。
はじめに
以前、Vimの翻訳プラグインtranslate.vimを作ってからブラウザで翻訳する機会がほとんど無くなりました。
普段は日本語と英語を交互で翻訳することが多く、ふと英語の発音をVimで聞けたらいいなぁと思い、5分くらいでぱぱっと作りました。
どんな感じ?
こんな感じです。Qiitaは動画を載せられ無いのでツイートの方で見て頂ければと思います。
https://twitter.com/gorilla0513/status/1180480069371719680?s=20
導入
1点注意ですが、このプラグインは内部でsay
コマンドを使用していて、このコマンドはMacOSにしかないため、Mac以外はこのプラグインを使えないです。
使い方
とても簡単です。:Say
を実行するだけです。
もちろん選択したテキストを翻訳することもできます。
また:Say "my name is gorilla"
といった感じで引数を渡すことで、
引数のテキストを読み上げてくれます。
ボイスの変更
vimrcに次のように設定を書くことで変更できます。
letg:say_voice='Kyoko'
デフォルトのボイスは英語のAlex
になっています。say
で使用できる言語は日本語や中国語、韓国語などがあります。
詳しくはREADMEを参照してください。
仕組み
Vimでsay
コマンドを非同期で実行しているだけです。
メインの処理はたったこれだけ。
function! say#say(start,end,...) abort
let text =join(getline(a:start,a:end),"\n")ifa:0!=0let text =a:1endiflet voice = get(g:,'say_voice','Alex')let cmd =['say','-v', voice, text]call job_start(cmd,{ \'err_cb':function('s:err_cb'), \})endfunction
getline
を使用して、選択した範囲のテキストを取得しています。
そして引数がある場合は、引数を優先するようにしています。
job_start
でsay
コマンドを非同期で実行させています。
とても簡単ですね。
最後に
ぱぱっと作ったので、何か便利な機能を思いついたら改良していきたいと考えています。
欲を言えば他のOSでもテキストを読み上げる方法があれば、インターフェイスをきちんと固めて対応したいと考えています。
もしこの方法で実現できるといった情報があればぜひコメントを頂けると助かります。