MacVim で日本語入力中に Shift+Space が効かない問題を修正する

問題

  • 私は日本語入力中でも Shift+Spaceで常に半角スペースを入力できるようにしている。
  • この機能はほぼすべてのアプリケーションで問題なく利用可能だが、唯一 MacVim のみで利用不可能であった。MacVim は私のメインエディタなので非常に困っていた。
  • MacVim-Kaoriya ではこの問題が修正されているが、更新が途絶えており可能であれば最新版の MacVim を使用したい。
  • macOS 標準の日本語入力ではなく Google 日本語入力に変更すればこの問題は解決するとする記事もあるが、私の環境では Google 日本語入力でも Shift+Space で半角スペース入力不可であった。

既存の報告

既存の報告もいくつかある。

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

挿入ファイルと位置: https://github.com/macvim-dev/macvim/blob/35dc1a84c170d9945cd4cda69cafe60999f86824/src/MacVim/MMTextViewHelper.m#L176

ビルド

./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 を送ってもよさそうだが……。