LoginSignup
4
1

More than 3 years have passed since last update.

Vimが喋った

Last updated at Posted at 2019-10-05

ども、Vimゴリラです。

はじめに

以前、Vimの翻訳プラグインtranslate.vimを作ってからブラウザで翻訳する機会がほとんど無くなりました。
普段は日本語と英語を交互で翻訳することが多く、ふと英語の発音をVimで聞けたらいいなぁと思い、5分くらいでぱぱっと作りました。

どんな感じ?

こんな感じです。Qiitaは動画を載せられ無いのでツイートの方で見て頂ければと思います。
https://twitter.com/gorilla0513/status/1180480069371719680?s=20

導入

READMEを参照してください。

1点注意ですが、このプラグインは内部でsayコマンドを使用していて、このコマンドはMacOSにしかないため、Mac以外はこのプラグインを使えないです。

使い方

とても簡単です。:Say を実行するだけです。
もちろん選択したテキストを翻訳することもできます。

また:Say "my name is gorilla"といった感じで引数を渡すことで、
引数のテキストを読み上げてくれます。

ボイスの変更

vimrcに次のように設定を書くことで変更できます。

let g:say_voice = 'Kyoko'

デフォルトのボイスは英語のAlexになっています。sayで使用できる言語は日本語や中国語、韓国語などがあります。
詳しくはREADMEを参照してください。

仕組み

Vimでsayコマンドを非同期で実行しているだけです。
メインの処理はたったこれだけ。

function! say#say(start, end, ...) abort
    let text = join(getline(a:start, a:end), "\n")
    if a:0 != 0
        let text = a:1
    endif

    let 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_startsayコマンドを非同期で実行させています。
とても簡単ですね。

最後に

ぱぱっと作ったので、何か便利な機能を思いついたら改良していきたいと考えています。
欲を言えば他のOSでもテキストを読み上げる方法があれば、インターフェイスをきちんと固めて対応したいと考えています。

もしこの方法で実現できるといった情報があればぜひコメントを頂けると助かります。

4
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1