XcodeでVimキーバインドを使う「XVim2」

目次

  1. 証明書の発行
  2. XVim2のインストール
  3. XcodeにXVim2を読み込ませる
  4. .xvimrcでカスタマイズ 
  5. 参考

1. 証明書の発行

  1. アプリケーションのKeychain Access(キーチェーンアクセス)を起動
  2. Keychain Accessウィンドウの左側のデフォルトチェーン内のログインを選択
  3. 画面上部のメニューバーから、キーチェーンアクセス->証明書アシスタント->証明書を作成を選択

    キーチェーン証明書作成

  4. 以下と同じ情報を設定して、作成ボタンを押下

    • 名前 : XcodeSigner
    • 固有名のタイプ : 自己署名ルート
    • 証明書のタイプ : コード署名

      証明書作成時の入力内容

  5. 作成時の警告が出るが、続けるを選択

    証明書作成時の警告

  6. 以下の画像のような画面が表示されれば証明書の発行は成功

    証明書完成

2. XVim2のインストール

この作業では、任意の場所にリポジトリをクローンして作業を行ますが、今回はDesktopで作業することとして解説します。

Xcodeのパスの確認

インストール作業を行う前に、Xcodeが配置されているファイルパスの確認をします。

以下のコマンドで、/Applications/Xcode.app/Contents/Developerというパスが表示されればOKです。それ以外のパスが表示されてしまった場合は、以下コマンドで、パスを設定してください。

1
xcode-select -p

それ以外のパスが表示されてしまった場合は、以下コマンドで、パスを設定してください。

1
xcode-select -s /Applications/Xcode.app/Contents/Developer

インストール

注意 : この作業を行うときは、Xcodeを完全に落として(タスクキル)から行ってください

  1. ディレクトリを移動

    1
    cd ~/Desktop
  2. リポジトリをクローン

    1
    git clone https://github.com/XVimProject/XVim2.git 
  3. クローンしてきたリポジトリのディレクトリに移動

    1
    cd XVim2/
  4. makeコマンドでプラグインをビルド

    1
    make
  5. 出力がたくさん流れたあと、に以下のような文字が表示されれば成功

    1
    ** BUILD SUCCEEDED **

3. XcodeにXVim2を読み込ませる

  1. Xcodeを起動すると、以下の画像のようなウィンドウが表示されるので、Load Bundleを選択する
    Xcode起動時の確認画面
  2. 上部メニューバーのEditメニューの一番下にXVimが表示されて入れば導入成功

間違えて、Skip Bundleを選択してしまった場合

一度XCodeを閉じて(タスクキル)して、以下コマンドをターミナルで実行してから再度XCodeを実行するとまた確認ウィンドウが表示さる

X.X = 自分が使っているXcodeのバージョン

1
defaults delete com.apple.dt.Xcode DVTPlugInManagerNonApplePlugIns-Xcod-X.X

4. .xvimrcでカスタマイズ

ホームディレクトリ直下に.xvimrcファイルを作成して、.vimrcと同じように記述していく

1
vim ~/.xvimrc

5. 参考

vimのカレントファイルをブラウザで開く

openコマンドを使う

  • vimでは%でカレントファイルのパスを取得できる
  • !はOS用のコマンド(echopwdなど)の先頭につけることでvimエディタ上からOS用コマンドを実行することができる
  • openはファイルのデフォルトで開くソフトに設定されているソフトで開かれる
1
:!open %

入力の手間を減らす

  • これまでのコマンドをショートカットキーで呼び出せるように.vimrcに追記する
1
2
3
4
5
" スペースキーをショートカットのトリガーとして認識するように設定
let mapleader = "\<Space>"

" スペースキー + o で実行できる
nnoremap <Leader>o :!open %<CR>

フォーカスを戻す(Mac)

  • openコマンドを使うとフォーカスがブラウザになってしまうので、AppleScriptを使ってフォーカスをVim(iTerm)に戻す
    • terminal_focusの対象アプリを変更すればiTerm以外のソフトにも対応可能

~/.vim/plugin/BrowserOpen.vim

1
command! -bar BrowserOpen !open % | osascript $HOME/bin/terminal_focus.scpt

~/bin/terminal_focus.scpt

1
tell application "iTerm" to activate

~/.vimrc

1
2
3
4
5
" スペースキーをショートカットのトリガーとして認識するように設定
let mapleader = "\<Space>"

" スペースキー + o で実行できる
nnoremap <Leader>o :BrowserOpen<CR>

AppleScriptでVimの保存時のファイル更新を取得してブラウザを更新する

概要

Vimでファイルを保存した時にファイルをブラウザで開いている場合(HTMLを書いている場合など)、いちいちブラウザにフォーカスを当てて、ブラウザ再読み込みを行うのは面倒くさいので、

  1. ブラウザにフォーカスを当てる
  2. command + rイベントを発行
  3. フォーカスをターミナルに戻す

の動作を自動化する

Vimで使用するコマンドを実装する

  1. /Users/daiki/.vim/pluginchrome.vimを配置
    • ディレクトリがない場合は作成する
  2. 以下のコードをchrome.vimに書き込んで保存

chrome.vim

1
2
3
command! -bar ChromeReload silent !osascript $HOME/bin/chrome_reload.scpt && osascript $HOME/bin/terminal_focus.scpt
command! -bar ChromeStartObserve ChromeStopObserve | autocmd BufWritePost <buffer> ChromeReload
command! -bar ChromeStopObserve autocmd! BufWritePost <buffer>

ブラウザにフォーカスを当ててリロードするコマンドを実装

  1. /Users/daiki/binchrome_reload.scptを配置
    • ディレクトリがない場合は作成する
  2. 以下のコードをchrome_reload.scptに書き込んで保存

    カスタマイズ

  • 1行目:tell application "safari" to activatesafariの部分を別のブラウザの名前に変更すると開くブラウザを変更できる

chrome_reload.scpt

1
2
tell application "safari" to activate
tell application "System Events" to keystroke "r" using {command down}

ターミナルにフォーカスを戻すコマンド

  1. /Users/daiki/binterminal_focus.scptを配置
    • ディレクトリがない場合は作成する
  2. 以下のコードをterminal_focus.scptに書き込んで保存

    カスタマイズ

  • "Terminal"の部分を書き換えると別アプリにフォーカスを当てられる

terminal_focus.scpt

1
tell application "Terminal" to activate

Vimで使用するには

vimを開いて、ブラウザで更新したいファイルに対して以下のコマンドを打つ

  • :ChromeReload:1回ブラウザをリロードする
  • :ChromeStartObserve:Vimで保存するたびにブラウザをリロードする
  • :ChromeStopObserve:ChromeStartObserveの保存時の自動リロードを停止する

参考

https://lukesilvia.hatenablog.com/entry/20101023/p2

入力補完プラグイン「Deoplete」の導入方法

vimにdeopleteを入れる

インストールに前提条件の多いPluginなので詰まるところが多かった

環境

  • M1 Mac
  • macOS Big Sur(11.2)
  • vim 8.2

公式の手順

日本語訳

最初に

注意: deopleteVimで使用する場合でも Neovim (最新のものを推奨) が必要
Vimを使用する場合Vimバージョン8.1以上 で Python 3.6.1以上timersが有効になっている必要がある。

注意: deopleteはmsgpackパッケージ1.0.0+を必要とします。pipでmsgpackパッケージをインストール/アップグレードしてください。
msgpack/msgpack-python

注意: どうしても古い msgpack を使う必要がある場合は、代わりに deoplete ver.5.2 を使ってください。
Shougo/deoplete.vim

要件

  • neovimをインストールしておく

    1
    pip3 install --user pyvim
  • neovimでpython3が有効かを確認

    • nvimを起動して以下のコマンドで1が出るか確認
      1
      :echo has("python3")

.vimrcに記述

  1. 今回はプラグイン管理ツールのVundleを使用する

    1
    2
    3
    Plugin 'Shougo/deoplete.nvim'
    Plugin 'roxma/nvim-yarp'
    Plugin 'roxma/vim-hug-neovim-rpc'
    1
    2
    " deopleteをVim起動時に有効にする
    let g:deoplete#enable_at_startup = 1
  2. :PluginInstallでインストール

トラブル対応

ファイルを開くとエラーが表示される

1
[deoplete] deoplete failed to load. Try the :UpdateRemotePlugins command and restart Neovim. See also :checkhealth.

VimにPluginマネージャー「Vundle」を入れる

環境

  • Mac MacBook Air (M1, 2020)
  • OS Big Sur v11.0.1
  • VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Oct 29 2020 23:33:57)

手順

1. ホームディレクトリにフォルダを作る

1
mkdir -p ~/.vim/bundle/Vundle.vim

2. GitHubからダウンロード

1
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

3. .vimrcにの先頭に設定を記述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

Plugin 'VundleVim/Vundle.vim'

" 導入したいプラグインを以下に列挙
" Plugin '[Github Author]/[Github repo]' の形式で記入
Plugin 'airblade/vim-gitgutter'

call vundle#end()
filetype plugin indent on

" その他のカスタム設定を以下に書く

4. vimを開いた状態でコマンドを打ってインストール

1
:PluginInstall

Ctrl+cとEscの違い

Ctrl+cはEscと同じ挙動をしない場合がある

例えば、矩形選択モードctrl + vでマルチカーソル処理を行おうとした時に、入力内容を確定するために、インサートモードを抜けるが、その時の挙動がCtrl + cEscでは、違ったものになる

  • Ctrl + c : 最初の1行しか入力内容が反映されない
  • Esc : 期待通りの選択している全ての行に入力値が反映される

対策

  1. キーマップを書き換えてCtrl + cEscと同じ扱いにする

    1
    imap <C-c> <Esc>
  2. Ctrl + [を使う

  3. 素直にEscを使用する