手紙を書くときにVim Play TypewRiterを再生するにはどうすればよいですか?
-
08-10-2019 - |
質問
多くの書いた後 WindowsのQ10, 、私はあなたがキーを押すたびに作るタイプライターの音に慣れました。少なくとも私にとっては、この種の健全なフィードバックがあるのは素晴らしいことです。
一方、Linuxでは、編集機能があるため、Vimを書くのが大好きです。この機能をVIMに追加するにはどうすればよいですか?
簡単に言った、 挿入モードでキーを押すたびにサウンドを再生したいです。
解決
さて、これはちょっとクレイジーですが、うまくいくようです。まず、AIFF形式のタイプライターサウンドを手に入れます。次に、そのタイプライターの音を入れます ~/.vim/support/my_typewriter_sound.aiff
. 。次に、以下を追加します ~/.vimrc
.
function! PlaySound()
silent! exec '!afplay ~/.vim/support/my_typewriter_sound.aiff &'
endfunction
autocmd CursorMovedI * call PlaySound()
上記の関数が呼び出すことに注意してください afplay
, 、私はMacで動作することを知っているので、置き換える必要があります play
Linuxで。 Windowsでは、私にはわかりません。
あなたは上で何が起こっているのか知っています、私たちは最初に呼ばれる関数を作成します PlaySound
それはに殻を出します afplay
. 。次に、カーソルが挿入モードで移動するたびに発射されるオートコマンドをセットアップします。それが発射するとき、それは呼び出します PlaySound
.
他のヒント
プラグインが存在します。ここで見つけることができます: https://github.com/osyo-manga/vim-sound
ただし、Sound Effectsファイルを自分で追加する必要があります。これはここで見つけることができます。http://www.soundjay.com/typewriter-sounds.html
Solarisを使用している場合は、この一連のスクリプトでカーネルキーボードドライバーをDTRACEすることができます。 http://www.brendangregg.com/dtrace/typewriter-0.75.tar.gz
試してみてください qweritckle
Linuxのタイプライターサウンドエミュレータです。
楽しいアイデア、そして答えてくれてありがとうトロッター。しかし、あなたの答えを使用して、私は自分のシステム(Ubuntu 14.04)で見つけました(Vimが各キープレスがメッセージで空白になったことがわかりました。
Enterまたは入力コマンドを押して続行します
コマンドを黙って実行するトピックに関する議論に基づいて、vimで https://vi.stackexchange.com/questions/1942/how-to-execute-shell-commands 私は試した:
function! PlaySound()
silent! exec '!play ~/.vim/support/my_typewriter_sound.wav &' | :redraw!
endfunction
autocmd CursorMovedI * call PlaySound()
空白の画面が自動的にクリアされましたが、各キープレスの後にフリッカーが表示され、最後のキープレスが完成した後にのみ音が生成され、非常に不自然でてんかんの経験ができました。同様に、OliveruvはVIMが同期して実行されるという重要な説明を与えました。つまり、実行が完了するまで続くのを待っています。彼は非同期実行のためにvim-dispatchまたはneomakeを提案しますが、最終的に私は一緒に行きました vimのために行います 特定のコンピレーションタスクではなく、任意のシェルコマンドを実行することに向けられているためです。 VIMを使用して、VIMに組み込みのPythonサポートを使用して、各コマンドを別のスレッドで実行します(非同期)。次のように、このプラグインを使用して結果に非常に満足しています。
function! PlaySound()
:DoQuietly play ~/.vim/support/my_typewriter_sound.wav
endfunction
autocmd CursorMovedI * call PlaySound()
画面のちらつきはなく、個々のキープレスは、クリックの本物のガタガタカスケードのためにオーバーラップします。