MacVim で日本語入力中に Shift+Space が効かない問題を修正する
問題
- 私は日本語入力中でも Shift+Spaceで常に半角スペースを入力できるようにしている。
- この機能はほぼすべてのアプリケーションで問題なく利用可能だが、唯一 MacVim のみで利用不可能であった。MacVim は私のメインエディタなので非常に困っていた。
- MacVim-Kaoriya ではこの問題が修正されているが、更新が途絶えており可能であれば最新版の MacVim を使用したい。
- macOS 標準の日本語入力ではなく Google 日本語入力に変更すればこの問題は解決するとする記事もあるが、私の環境では Google 日本語入力でも Shift+Space で半角スペース入力不可であった。
既存の報告
既存の報告もいくつかある。
- https://qiita.com/zhupeijun/items/75be1bb4aa9afb38aafc
- https://unk-pizza.hatenadiary.org/entry/20141205/p1
- https://groups.google.com/forum/#!topic/vim_mac/Yo2DaV103rM
MacVim-Kaoriya には下のパッチが取り込まれている。このパッチを取り込む形で最新版の MacVim をビルドすればよいと考えた。
commit 6b36374325cbcfe58172edfe95b6bbeff42b3bae Author: Masayuki Yamaya <yamaya@cyberdom.co.jp> Date: Wed Oct 22 23:59:30 2014 +0900 Fix dont input space with shift on yosemite diff --git a/src/MacVim/MMTextViewHelper.m b/src/MacVim/MMTextViewHelper.m index fdc7aaf..3da0c29 100644 --- a/src/MacVim/MMTextViewHelper.m +++ b/src/MacVim/MMTextViewHelper.m @@ -187,6 +187,11 @@ KeyboardInputSourcesEqual(TISInputSourceRef a, TISInputSourceRef b) // with Ctrl-6 or Ctrl-^ when IM is active. [self doKeyDown:@"\x1e"]; string = nil; +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_10) + } else if ((flags & NSShiftKeyMask) && [string isEqualToString:@" "]) { + // HACK! for Yosemite - Fix for Shift+Space inputing + // do nothing +#endif } else { // HACK! interpretKeyEvents: may call insertText: or // doCommandBySelector:, or it may swallow the key (most likely the
ビルド
- ビルド方法
./configure
ビルドオプションは MacVim の Release 版をビルドしていると思われる Travis CI で指定されているものを利用した。
https://travis-ci.com/github/macvim-dev/macvim/jobs/372444524/config
$ ./configure LANGOPT="--enable-perlinterp=dynamic --enable-pythoninterp=dynamic --enable-python3interp=dynamic --enable-rubyinterp=dynamic --enable-luainterp=dynamic --with-lua-prefix=/usr/local" HAS_GETTEXT=1
2022-12-28 追記: ビルドは GitHub CI に移行したようだ。MacVim GitHub CI における MacVim Release 174 のビルド方法 (ワークフロー)を参考にビルドオプションを見直した。
configure
前に brew install lua
などで lua などをインストールしておく。--enable-pythoninterp=dynamic
はうまくいかなかったので除外した。arm64 の設定は ld: symbol(s) not found for architecture arm64
のエラーが出たため除外した。
$ ./configure --with-features=huge --enable-netbeans --with-tlib=ncurses --enable-cscope --enable-gui=macvim --enable-perlinterp=dynamic --enable-python3interp=dynamic --enable-rubyinterp=dynamic --enable-luainterp=dynamic --with-lua-prefix=/usr/local --with-macarchs=x86_64 --enable-fail-if-missing
make
Anaconda を使っている場合は make
前に conda deactivate
しておく。
また Xcode をアップデートしてある場合は xcode-select --install
しておく。
$ make -C src Vim
$ make
make 中にいくつかのエラーに遭遇したので対処した。
msgfmt: "ISO-8859-1" から "UTF-8" に変換できません. msgfmt は iconv() に依存しています.このバージョンは iconv() なしで作られています.
which gettext
したところ Anaconda でインストールしたものが参照されていた。Deactivate して再度 make した。
$ conda deactivate
試行錯誤中に brew install gettext
もしたが、おそらく conda deactivate
だけでOKで、brew install gettext
は不要だったと考える(∵ 公式のビルド説明書に Xcode Tools 以外には依存していないと書かれているので)。
tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
Command Line Tools を使用可能にしていなかったために起きたと思われる。 下のURLを参考に使用可能とした。 https://qiita.com/eytyet/items/59c5bad1c167d5addc68
Xcode を起動→Preferences→Locations→Command Line Tools のリストボックスから Xcode 10.x(現在のバージョンと同一の名称)を選択した。
ちなみにXcodeをアップデートした際は毎回 $ xcode-select --install
すべきとのこと。
結果
Shift+Space で半角入力ができる MacVim をビルドすることができた。
2014年頃から存在する問題のようで、Pull Request を送ってもよさそうだが……。