kotonoha_pcg@気ままに雑記

kotonoha_pcgが気分次第で様々書き置きます.dlang関係他:http://kotonoha-pcg.hatenadiary.com

Razerの光学赤軸キーボードを買った話とVim系エディタの復権

ブログ自体を書くのが久し振り過ぎて、何をかけば良いのか忘れてしまった…。

というのは本当なのですが(オイ)、RazerのHuntsman miniという光学式60%キーボードを買い、それに合わせて仕事なり作業なりするようになったのでメモ書きでも残しておこうかと思いますw

ちなみに先にまとめておくと、タイトル通り「キーボードを買ったらVim(とそのバインド)が復権した」という話。

キーボード

今現在使っているやつはコイツです

Razer Huntsman Mini

AmazonのRazerセールで、確か1万2千円位で買えた。定価は1.5万円くらい。これで、マウス・キーボード・マウスパッドが家も会社もRazerで統一されてしまうという結果にw

なお、会社で使ってるキーボードは上の白いやつなんですが、家ではBlackWidow V3 TKLを使ってます。動画ばっかり見るから、アローキー無いのは結構辛い。ずっと文章入力し続けるとかもないしねw

Huntsmanの方は、Spaceバーを上下逆に入れ替えて打ちやすく(?)した上で、Esc他6つのキーをBlackWidowと入れ替えてます。基本的に持ち歩き前提なのですが、だいたい家以外の場所は色温度が5000K~8000Kくらいのところにしか出ないので、こうするとキーボードを視界の隅で捉えた時に、Escの位置を見失わなくて済みます。

なお、コイツにはアローキーがFn同時押しという最悪の特徴があります。

いや、それだけなら最悪じゃないんですよ、問題はFnキー(RazerではHyperShiftと呼ばれているらしい?)と既存キーの同時押しで2次キーとして各機能を扱えるのですが、この2次キーの位置が変更不可。届いて触って10分で軽く絶望したw

やっぱりアローキー買おうかな、と思って物色はしてるものの、良い感じの物が生産終了だったり、自作キットでも販売終了になってたりするんですよね…

いっそ自作するしかないかな(無謀) とはいえ、アローキーがないと特にオフィス系のソフトが非常に使い辛いので、テンキーなりで代用したほうが良いかなぁとも考え始めています。

流石に1ヶ月も使ってきてHyperShiftにも慣れたとはいえ、未だにキーボード見ないとろくにアローキーの操作が出来ないんですよねw

と、いうことでアローキーをどうするかという問題はしばらく続きそうです。

Switch

Nintendo Swtchではないです() このキーボードはスイッチが2種類あって、どちらも光学式で赤軸と紫軸の2つが用意されています。

紫軸の方はClicky、つまり他のメカニカルでいう青軸ないし茶軸っぽい感じらしいのですが、職場用なので問答無用で赤軸を選択。こっちは赤軸とはいうものの、アクチュエーションポイントが1.0mmに設定されている上、正直に書くと普通の赤軸より静か。ググっても“静音赤軸”という表記が出てきますが、たしかにしっくり来る表現かなと思います。

もともとBlackwidowが黄軸で、MXでいう銀軸相当のスイッチだったのですが、そこから乗り換えるにあたり「同じくらい素早く入力できるスイッチを採用したキーボード」という条件だけは外せなかったので、必然的に銀軸系統か同様の仕様を持ったスイッチが使えるやつしか見てませんでした。

VimとHuntsman

上の2つの通り、アローキーが使いづらいキーボードとアローキーが無いと移動操作が面倒くさいエディタの組み合わせから、キーボードはそのままエディタをVimに変えることにした…7日だけw

色々あってやっぱりVSCodeで良くね?となり、いまはVSCode+vscodevimというVimmer御用達のエディタ構成になってしまいましたが。

このvscodevimはあくまでVimの動作をVSCode上でエミュレートするものなので、完全にVimの互換にはなりません。ただ、ある程度の機能(e.x.airline,easymotion,emmet)はプラグイン的に移植されているので、あまりにも凝りすぎる使い方をしなければ特に問題は無いはず。

ここで、vscodevimを導入する以前のアローキーありきのキーボードでは発生しなかった問題が起こります。 それが、「ノーマルモードと挿入モードを行き来する度に、全角半角キーの押下が必要」というやつ。Vimだと勝手に判別して処理してくれるので、この問題とは無縁の存在なんですよね。

一応ドキュメントにも記載があって、「im-selectを使うか同等のアプリを使って、指定の設定を記述すれば切り替えられるよ」的なことが書いてあります。それに従って、いくつか調べながら書いた結果がこれ↓

    //vscodevim yank config
    "vim.useSystemClipboard": true,
    //vscodevim configuration 
    "vim.autoSwitchInputMethod.enable": true,
    "vim.autoSwitchInputMethod.defaultIM": "0",
    "vim.autoSwitchInputMethod.obtainIMCmd": "C:\\******\\zenhan.exe" ,
    "vim.autoSwitchInputMethod.switchIMCmd": "C:\\******\\zenhan.exe {im}",
    "diffEditor.wordWrap": "on",
    "editor.wordWrap": "on"

因みにM1のTwitter専用機MBAにもVSCode+vscodevimでVim環境を作ってるのですが、そっちは普通にim-selectを使って全角半角を切り替えている感じ。

    "terminal.integrated.fontSize": 14,
    "vim.autoSwitchInputMethod.enable": true,
    "vim.autoSwitchInputMethod.defaultIM": "com.apple.keylayout.ABC",
    "vim.autoSwitchInputMethod.obtainIMCmd": "/usr/local/bin/im-select ",
    "vim.autoSwitchInputMethod.switchIMCmd": "/usr/local/bin/im-select {im}"

M1…というかMojaveかそのへんから、Appleの署名かなにかが無いとWebから入手したアプリを動かせなくなったのですが、Appleサポート見て実行できるようにしました。

開発元が未確認のMacアプリケーションを開く - Apple サポート (日本)

また、im-select自体は/usr/loca/binに移動し、パーミッションを755に設定しています。

上の設定でも書いていますが、vscodevimでOSとのクリップボード共有を有効化するには、次のようにsetting.jsonに記述すれば良いぽいです。

    "vim.useSystemClipboard": true
参考:maku.blog

lightlineの代替

Vimにはitchyny氏が作成されたlightlineというプラグインがあります。

github.com

これを使うと、ノーマルモードと挿入モード、置換モードに入った時などに、それぞれstatus lineの色表示を変えることで、どのモードに入ってるかが一目で判るようになります。

が、VSCodeないしvscodevimではそういう良い感じのプラグインがない…ので、 "vim.statusBarColorControl"をtrueにして、そっちでモード切替時に強制的に色を変更してくれるように設定しています。

    "vim.statusBarColorControl": true,
    "vim.statusBarColors.normal": "#B4BE82",
    "vim.statusBarColors.insert": "#1e90ff",
    "vim.statusBarColors.visual": "#ff8c00",
    "vim.statusBarColors.visualline": ["#ff8c00", "#161821"],
    "vim.statusBarColors.visualblock": "#ff8c00",
    "vim.statusBarColors.replace": ["#E2A478", "#161821"],
    "vim.statusBarColors.commandlineinprogress": ["#818596", "#161821"],
    "vim.statusBarColors.searchinprogressmode": ["#818596", "#161821"],
    "vim.statusBarColors.easymotionmode": ["#818596", "#161821"],
    "vim.statusBarColors.easymotioninputmode": ["#818596", "#161821"],
    "vim.statusBarColors.surroundinputmode": [
        "#818596",
        "#161821"
    ],
    "vim.hlsearch": true,
    //自動的に作成される
    "workbench.colorCustomizations": {
        "statusBar.background": "#B4BE82",
        "statusBar.noFolderBackground": "#B4BE82",
        "statusBar.debuggingBackground": "#B4BE82",
        "statusBar.foreground": "#161821",
        "statusBar.debuggingForeground": "#161821"
    }

因みに…コメントで(自動的に作成される)という箇所がありますが、上記のstatusBarColors関連の設定を追記すると、このworkbench.colorCustomizationsが自動的に追加され、消してもゾンビのように復活するとの事なので、そのまま放置しています。

…が、位置的には途中で書いてあるよりは(個人の嗜好で)最後にあった方が良いと思ってるので、他の設定は全てvscodevim関連の上の方に記述するようにしています。

もっと良い感じの拡張機能か書き方が見つかったら変えようかなw

ミニマップの描画設定

上記のstatusBar関連の設定をやると、高確率で重くなる印象があります。

僕はミニマップ表示が無いと生きていけない人間なので、ミニマップ表示の描画設定を軽くして、少しでもstatusBarの色変更に依る挙動の軽快さを確保しようとしてる感じですw

    "editor.renderControlCharacters": false,
    "editor.minimap.renderCharacters": false

これをやると、ほぼ数文字から1文字単位で細かく描画されていたミニマップが、大雑把な色と「■」ブロックで表示されるようになります。

体感では少し軽くなったかな?という程度なので、これも上記の拡張機能が見つかったやめるかもですがw

拡張機能

VSCodeの最大の強み、それが拡張機能で色々とやれることを増やせることだと思ってます。拡張機能自体はあまり興味はなかったのですが、Rainbow CSV EditorなんかはCSVの色付けに加えてRBQLというSQLっぽい言語でクエリを発行出来るみたいです。

RBQL自体はSQLのようでfrom句がなかったり、微妙に書き方が違ったりしていますが、何より僕自身がSQLの書き方を完璧に忘れてしまっているので、今の所はあんまりガリガリ使ってはいません。 ただ、仕事柄CSVファイルを扱う機会は多いので、この際全部エディタ上で完結させられるようにしてみたいという気持ちはありますw


結局、なんだかんだ言って“手に馴染むキーボード”があんまりはっきりしていませんwもう12月ですが、この1年でキーボード3つは購入しており、メーカーはともかくすべて違う特性というか個性を持っています。

自由に使えるお金が増えた分、色々と買って試してみる機会も増えてはいますが、程々にしながら自分の使い勝手の良さを追求していきたいですね。