やりたいこと
M1 Mac Ventura において、
-
iTerm2 による便利かつカッコいい見た目のターミナルで、
-
以下の機能を持った Vim を CUI で使いたい。
- 文字コード、タブ・インデントあたりの挙動が快適
- NeoBundle を用いてプラグインを管理できる
- カラースキーム、ステータスライン、インデント可視化でコードが見やすい
- クリップボード連携
- オートセーブ機能
- 背景色が半透明
Mac に標準インストールされている Vim は最低限の要素しか入っていない「vim.tiny」だと思っていたのですが、私の環境 (M1 Mac Ventura) ではどういうわけか clipboard 連携にはじめから対応していました。ラッキー!
% which vim
/usr/bin/vim
% vim --version | grep clipboard
+clipboard -keymap +printer +vertsplit
+eval -mouse_jsbterm -sun_workshop -xterm_clipboard
ということで、Mac に最初から入っている Vim をそのままサクッと魔改造していきます。
iTerm2 のインストールと設定
Mac用のターミナルエミュレータ「iTerm2」をインストールします。Mac標準のターミナルよりもずっと使いやすく、カスタマイズ性が高いです。以下のサイトからインストールファイルをダウンロードできます。
ありがたい先人達の記事を参考に、使いやすくします。powerlevel10k を使うとお手軽に見た目をカッコよくできます。
- ホットキーで画面下半分に半透明のターミナルが現れるような設定
- powerlevel10k の質問に答えて iTerm2 の見た目をかっこよくする
powerlevel10k を適用した後は、一度 iTerm2 を再起動する必要があります。
この時点で iTerm2 での256色環境の設定も済んでいるはずなので、後で設定する Syntax ハイライトも綺麗に表示されるようになります。
Vim の設定
NeoBundle のインストール
まず、Vimプラグインを管理するためのVimプラグインである「NeoBundle」を導入します。
NeoBundle - GitHub
% git clone https://github.com/Shougo/neobundle.vim.git ~/.vim/bundle/neobundle.vim
Cloning into '/Users/xxx/.vim/bundle/neobundle.vim'...
remote: Enumerating objects: 9242, done.
remote: Total 9242 (delta 0), reused 0 (delta 0), pack-reused 9242
git clone
するリンク先は、https://github.com/Shougo/neobundle.vim
ではなく https://github.com/Shougo/neobundle.vim.git
です。Readme.md
のとおりのコマンドを打つと、末尾の.git
が抜けていてうまくクローンできませんでした。
~/.vimrc
の設定
ホームディレクトリに.vimrc
という名前のテキストファイルを作成し、ここにカスタマイズ内容を記述していくと Vim に反映されます。
私は次の記事のほぼコピペでカスタマイズ内容を構成しました。。
- 構成の大部分
- クリップボード連携
- オートセーブ機能
- 背景の半透明化
set encoding=utf-8
scriptencoding utf-8
set fileencoding=utf-8 " 保存時の文字コード
set fileencodings=ucs-boms,utf-8,euc-jp,cp932 " 読み込み時の文字コードの自動判別. 左側が優先される
set fileformats=unix,dos,mac " 改行コードの自動判別. 左側が優先される
set ambiwidth=double " □や○文字が崩れる問題を解決
set expandtab " タブ入力を複数の空白入力に置き換える
set tabstop=4 " 画面上でタブ文字が占める幅
set softtabstop=4 " 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅
set autoindent " 改行時に前の行のインデントを継続する
set smartindent " 改行時に前の行の構文をチェックし次の行のインデントを増減する
set shiftwidth=4 " smartindentで増減する幅
set incsearch " インクリメンタルサーチ. 1文字入力毎に検索を行う
set ignorecase " 検索パターンに大文字小文字を区別しない
set smartcase " 検索パターンに大文字を含んでいたら大文字小文字を区別する
set hlsearch " 検索結果をハイライト
" ESCキー2度押しでハイライトの切り替え
nnoremap <silent><Esc><Esc> :<C-u>set nohlsearch!<CR>
" set whichwrap=b,s,h,l,<,>,[,],~ " カーソルの左右移動で行末から次の行の行頭への移動が可能になる
set number " 行番号を表示
set cursorline " カーソルラインをハイライト
" 行が折り返し表示されていた場合、行単位ではなく表示行単位でカーソルを移動する
nnoremap j gj
nnoremap k gk
nnoremap <down> gj
nnoremap <up> gk
" バックスペースキーの有効化
set backspace=indent,eol,start
set showmatch " 括弧の対応関係を一瞬表示する
source $VIMRUNTIME/macros/matchit.vim " Vimの「%」を拡張する
set wildmenu " コマンドモードの補完
set history=5000 " 保存するコマンド履歴の数
if has('mouse')
set mouse=a
if has('mouse_sgr')
set ttymouse=sgr
elseif v:version > 703 || v:version is 703 && has('patch632')
set ttymouse=sgr
else
set ttymouse=xterm2
endif
endif
set clipboard+=unnamed " クリップボードとの連携
if &term =~ "xterm"
let &t_SI .= "\e[?2004h"
let &t_EI .= "\e[?2004l"
let &pastetoggle = "\e[201~"
function XTermPasteBegin(ret)
set paste
return a:ret
endfunction
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin("")
endif
if has('vim_starting')
" 初回起動時のみruntimepathにNeoBundleのパスを指定する
set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
call neobundle#begin(expand('~/.vim/bundle/'))
" インストールするVimプラグインを以下に記述
" NeoBundle自身を管理
NeoBundleFetch 'Shougo/neobundle.vim'
"----------------------------------------------------------
" ここに追加したいVimプラグインを記述する
" カラースキームmolokai
NeoBundle 'tomasr/molokai'
" ステータスラインの表示内容強化
NeoBundle 'itchyny/lightline.vim'
" 末尾の全角と半角の空白文字を赤くハイライト
NeoBundle 'bronson/vim-trailing-whitespace'
" インデントの可視化
NeoBundle 'Yggdroot/indentLine'
" 構文エラーチェック
NeoBundle 'scrooloose/syntastic'
" オートセーブ
NeoBundle 'vim-scripts/vim-auto-save'
"----------------------------------------------------------
call neobundle#end()
" ファイルタイプ別のVimプラグイン/インデントを有効にする
filetype plugin indent on
" 未インストールのVimプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定
NeoBundleCheck
"----------------------------------------------------------
" molokaiの設定
"----------------------------------------------------------
if neobundle#is_installed('molokai') " molokaiがインストールされていれば
colorscheme molokai " カラースキームにmolokaiを設定する
endif
set t_Co=256 " iTerm2など既に256色環境なら無くても良い
syntax enable " 構文に色を付ける
" 背景色を半透明にする
highlight Normal ctermbg=NONE guibg=NONE
highlight NonText ctermbg=NONE guibg=NONE
highlight SpecialKey ctermbg=NONE guibg=NONE
highlight EndOfBuffer ctermbg=NONE guibg=NONE
"----------------------------------------------------------
" ステータスラインの設定
"----------------------------------------------------------
set laststatus=2 " ステータスラインを常に表示
set showmode " 現在のモードを表示
set showcmd " 打ったコマンドをステータスラインの下に表示
set ruler " ステータスラインの右側にカーソルの現在位置を表示する
"----------------------------------------------------------
" Syntasticの設定
"----------------------------------------------------------
" 構文エラー行に「>>」を表示
let g:syntastic_enable_signs = 1
" 他のVimプラグインと競合するのを防ぐ
let g:syntastic_always_populate_loc_list = 1
" 構文エラーリストを非表示
let g:syntastic_auto_loc_list = 0
" ファイルを開いた時に構文エラーチェックを実行する
let g:syntastic_check_on_open = 1
" 「:wq」で終了する時も構文エラーチェックする
let g:syntastic_check_on_wq = 1
" Javascript用. 構文エラーチェックにESLintを使用
let g:syntastic_javascript_checkers=['eslint']
" Javascript以外は構文エラーチェックをしない
let g:syntastic_mode_map = { 'mode': 'passive',
\ 'active_filetypes': ['javascript'],
\ 'passive_filetypes': [] }
"----------------------------------------------------------
" auto-saveの設定
"----------------------------------------------------------
let g:auto_save = 1
let g:auto_save_in_insert_mode = 0
以上です。皆様の快適な Vim ライフの一助となれば幸いです。