なまえは まだ ない

思いついたことをアウトプットします

手元のMac環境をリセットする (4)

この記事について

この記事は次の記事の続きです。

エディター類を使いやすいように設定する

コードを書くにせよドキュメントを書くにせよ、自分が使いやすいエディターを使うべきです。 私は学生時代からニワカVimmerなのでVimをカスタマイズしていきます。 また、最近はVisual Studio Codeの便利さに惚れてガンガン使っているので、こちらの設定も少し書きます。

Vim

真面目にコードを書くときはほぼVisual Studio Codeになってしまったので最近Vimの出番はめっきり減ってしまいましたが、 それでも簡単なスクリプトを書くときとかファイルを眺めたいときはVimを叩いてしまいます。 今までなんとなく使っていた.vimrcをうっかり紛失してしまったので、一から作ってみました。

また、例によってパクリ先人の知恵を大いに借りています。 今回は主に次の記事を参考にしました。

【詳解】モテたいVimmer必見 快適にコーディングするためのvimrc解説 - Qiita

まず .vimrcですが、ズバリ次のような感じにしました。

set encoding=utf-8
scriptencoding utf-8
" ファイル読み込み時とVim Scriptのマルチバイト設定
" コメントなどで日本語を書く場合は必ずファイル先頭に記載しておく

"----------------------------------------------------------
" NeoBundle
"----------------------------------------------------------
if has('vim_starting')
    " 初回起動時のみruntimepathにNeoBundleのパスを指定する
    set runtimepath+=~/.vim/bundle/neobundle.vim/

    " NeoBundleが未インストールであればgit cloneする
    if !isdirectory(expand("~/.vim/bundle/neobundle.vim/"))
        echo "install NeoBundle..."
        :call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim")
    endif
endif

call neobundle#begin(expand('~/.vim/bundle/'))

" インストールするVimプラグインを以下に記述
" NeoBundle自身を管理
NeoBundleFetch 'Shougo/neobundle.vim'
" カラースキーム: hybrid
NeoBundle 'w0ng/vim-hybrid'
" ステータスラインの表示内容強化
NeoBundle 'itchyny/lightline.vim'
" インデントの可視化
NeoBundle 'Yggdroot/indentLine'
" 末尾の全角半角空白文字を赤くハイライト
NeoBundle 'bronson/vim-trailing-whitespace'

" インストールするVimプラグインを記述ここまで
call neobundle#end()

" ファイルタイプ別のVimプラグイン/インデントを有効にする
filetype plugin indent on

" 未インストールのVimプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定
NeoBundleCheck

"----------------------------------------------------------
" 文字
"----------------------------------------------------------
set fileencoding=utf-8 " 保存時の文字コード
set fileencodings=ucs-boms,utf-8,euc-jp,cp932 " 読み込み時の文字コードの自動判別. 左側が優先される
set fileformats=unix,dos,mac " 改行コードの自動判別. 左側が優先される
set ambiwidth=double " □や○文字が崩れる問題を解決

"----------------------------------------------------------
" カラースキーム
"----------------------------------------------------------
set background=dark " Vimの背景を暗系に設定
colorscheme hybrid " カラースキームhybridを適用
syntax enable " runtimepathで読み込まれたシンタックスハイライトの有効化

"----------------------------------------------------------
" ステータスライン
"----------------------------------------------------------
set laststatus=2 " ステータスラインを常に表示
set showmode " 現在のモードを表示
set showcmd " 打ったコマンドをステータスラインの下に表示
set ruler " ステータスラインの右側にカーソルの位置を表示する

"----------------------------------------------------------
" タブとインデント
"----------------------------------------------------------
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 " カーソルラインをハイライト
set scrolloff=3 " 画面の上下3行分の余裕を持たせてスクロールする

" 行が折り返し表示されていた場合、行単位ではなく表示行単位でカーソルを移動する
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=100 " 保存するコマンド履歴の数

"----------------------------------------------------------
" マウスでカーソル移動とスクロール
"----------------------------------------------------------
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

"----------------------------------------------------------
" クリップボードからのペースト
"----------------------------------------------------------
" 複数行ペースト時の不要な自動インデントを無効化
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

カラースキームはどこかの記事で目に優しいと評判のHybridを採用しました。 別のカラースキームを試したい場合は.vimrcに記述した後、VImを再起動するか次のコマンドを実行すればインストールされます。

:NeoBundleInstall

逆にこれ使わんなーってプラグインとかカラースキームが出てきたら.vimrcから記述を削除して次のコマンドを実行します。

:NeoBundleClean

この辺りは現状を暫定版としておいて、試行錯誤しながら変えていきたいと思います。

Visual Studio Code

最近もっぱらメインで使っているエディターです。 以前の記事でインストールと日本語化までは完了しているので、とりあえず使うことは使えます。 とりあえず拡張機能として次のものをインストールします。

Mac環境でVim拡張機能を入れる場合は、次のコマンドを実行しておく必要があるようです。

defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false

次回予告

ここまでで大体やっておきたい初期設定が終わったので、 あとはこれらの設定を別環境でも適用できるようスクリプト化してGitHubに公開したいと思います。

ちょっと長くなりそうなので、また次回。