はじめに
この記事は Vim2 Advent Calendar 2019 25日目の記事です
昨日の記事は,@shuhoyoさんのPowerShellのVim環境にAirlineを導入するでした
僕もWindowsでVim使ってるのでとても参考になりました
Dvorak 配列について
まずはこの名前を聞いたことが無い人に向けて説明します
Dvorakは,キー配列の一種で,恐らく多くの人が普段使っているQWERTY とは全く異なる配列になります
キー配列というと,JIS / US 配列の違いはもう少し知られていると思いますが,この2つはキーのレイアウト自体が異なる( JIS は Enter キーが大きかったり,変換・無変換キーがあったりする話です) のに対して,DvorakはUS 配列と同じ形状で,各キーに割り当てられた文字が異なります
これが,Dvorakのキー配列です (画像はWikipediaより)
Dvorak配列を使う利点や,Dvorak配列に変える方法については,この記事では述べません (本題から逸れるので)
自分は,Dvorak配列に乗り換えて約半年,Vimの経験は,3年ほど前に一時期使っていましたが最近は他のエディタに浮気していて,2ヶ月ほど前から再びVimを使うようになりました
Dvorak配列を使うにあたっての問題点
Vimの話を一旦置いて,Dvorak配列を使う場合初めに考えなければならない問題は,Ctrl+S
などの修飾キーを用いたショートカットをどうするかです
Windowsなら, Ctrl
,Win
,Alt
,
Maxなら, Cmd
, Option
,Ctrl
あたりと組み合わせる場合を考える必要があります
この問題に対して,大きく2種類の考え方があると思っています
- 修飾キーを使う場合のみ,従来のQWERTY配列にする
- 修飾キーも,Dvorakで使用する
何故修飾キーを使う場合だけQWERTYにするのかというと,修飾キーを用いたショートカットは,「キーの位置で割当てられている場合があるから」です
例えば,次のショートカットは,(Vim以外の)多くのソフトウェアで頻繁に使用するはずですCtrl/Cmd +
A
S
Z
X
C
V
これらはQWERTYなら左手の押しやすい位置にありますが,Dvorakに変えると,バラバラになり,特にXやVは少し押しづらいと思います
こういった既存のショートカットとの相性を考慮して,修飾キーを用いる場合だけ,QWERTYに変えるという選択肢がありますが,私はDvorakのまま使用しています
VimでDvorakを使うにはどうすればいいか
さて,ここから本題です
VimでDvorak配列を使うにはどうすればいいかを考えていきます
ここから先,基本的に自分の思考に沿って書いていくので,実際にそれが最適の方法かは人によって異なります
実際にDvorakを使ったことがない人でも,Vimを使った経験がある人は「カーソル移動どうするの?」という疑問が真っ先に出ると思います
とりあえずカーソル移動はいつもの場所にしてみる
流石にhjkl
をDvorakの場所で使うのは無理があります,そこでこの4つはとりあえずQWERTYの場所に変えてみます
nnoremap d h
nnoremap h j
nnoremap t k
nnoremap n l
vnoremap d h
vnoremap h j
vnoremap t k
vnoremap n l
これでいつものカーソル移動はできるようになりますが,d
t
n
が使用できなくなります
Dvorak用に変えたことで使えなくなったキーに該当するコマンドが,自分にとって必要かどうか考えていきます
自分が使わないコマンドなら,使えなくなったコマンドは使えないままでも問題ないでしょう
しかし,普段から使うコマンドなら,代わりにどこに移動させるか, もしくは代用となるコマンドを探す必要があります
d
使う
指定行の削除に使います.自分はガンガン使ってるのでこれを消すのは無理です
まずは,QWERTYでd
のあった位置を見てみます.
その位置にはe
があり,単語の終端に移動するコマンドですが,自分はw
とb
で十分に操作できていたのでe
を上書きします
(とはいえ,この記事を書くにあたってe
を使ってみたので,もしかしたら今後見直すかもしれません)
nnoremap e d
nnoremap ee dd
vnoremap e d
vnoremap ee dd
t
今は使わない?
同一行内の後方検索です
自分の場合,/
や, incsearch-fuzzy.vim
というプラグインを使用しているのでこれは不要に感じました.
よってtはmapせずにそのまま消し去ります
n
使う
/
などで検索した後に,ハイライトされてる単語間での移動に使います.多分next
の意味なんですかね
これも結構使うので移動先を考えます
QWERTYにおけるn
の位置には,Dvorakではb
があり,これは割と使っていたのでb
への移動は断念します
Dvorakでのn
の近くで,あまり使っていないキーは,自分の場合r
が該当しました.そのため,ここをn
と入れ替えてみます
nnoremap r n
nnoremap R N
vnoremap r n
vnoremap R N
Dvorakに変えても割とどうにでもなる
というわけで,カーソル移動を起点として,いくつかキーのmapを書き換えてみましたが,意外と問題なく設定できました.
自分が使いこなせていないコマンドがあるからかもしれませんが...
また,今回Dvorakを前提に話しましたが,Colemak など,他のキー配列を使用する場合にも,この考え方は応用できると思います.
まず,絶対に位置も変えたくないキーを起点にして,入れ替えた先のキーを使用するか,するなら更に他にキーと位置を変えるにはどうすればいいか... といった流れで考えていくと,自分なりのキーマップが作れると思います
それでは,良いVimライフを!