読者です 読者をやめる 読者になる 読者になる

$ service ssh0 start

from everything import *

Vimの基本設定例【自分のPCで使用しているソフトウェア,設定の紹介 #11】

自分のPCで使用しているソフトウェア,設定の紹介

さて前回は概略的な話をしましたが,今回はより詳しくVimの設定に関していくつか便利な設定を紹介してみたいと思います。

多くの人が設定しているであろうことは今回述べませんのであしからず。

全体が見てみたい,という方は以下のリンクから飛べますので,時間のあるときにでも眺めてみてください。

github.com

それではさっそくvimrcに書いている設定のいくつかを紹介していきます。

tmuxのウィンドウ名をVimで編集中のファイル名にする:

以前述べたように,基本的にtmux内に自動で入るようにしているので,tmuxとの連携は意識します。

if $TMUX != ""
  augroup titlesettings
    autocmd!
    autocmd BufEnter,InsertEnter * call system("tmux rename-window '(vim)" . expand("%:t") . "'")
    autocmd VimLeave * call system("tmux rename-window zsh")
    autocmd BufEnter * let &titlestring = ' ' . expand("%:t")
  augroup END
endif

のように書くことによって,バッファ切替時,インサートモードに入った段階でtmuxのウィンドウ名が切り替わります。 "VimLeave"でももとに戻すような設定をしていますが,zshのところで紹介したように,自動でリネームをしてくれるようになっているので,この部分は僕の環境では必要ありません。が,残ったままになっています。

詳しくはこちら↓を見てください。

tmuxのウィンドウ名をvimの編集中のファイル名に設定する - Qiita

参考:

Pythonスクリプトを編集時,gqコマンドでPEP8準拠フォーマットに

augroup filetype_python
  autocmd!
  " python
  autocmd Filetype python let &formatprg="autopep8 -"
  autocmd FileType python setlocal completeopt-=preview
augroup END

これは他のファイルタイプでも使えますが,formatprgを指定することで,gqコマンド(ある範囲行を整形)で用いられるプログラムを指定することができます。 autopep8というコマンドを使えば,たとえば1+21 + 2のように表示すべき,といったPEP8の基準に沿った形式に整形してくれます。

ガーッと書いていてスペース入れ忘れたり,横幅の文字数を超えていたりしたときに,手で直すのではなく,{v}gqなどでして一発で整形できます。

外部ツールとの連携は,簡単かつ便利なので,積極的にやりましょう。

htmlファイルの整形

これもformatprgを指定することで整形表示を行うものですが,より破壊的変更を行うものです。

文章変換ツールの代表としてpandocというソフトウェアがありますが,これを使って一回htmlファイルからmarkdownに変換し,それをまたhtmlに変換することで,よりシンプルで見やすい表示になります。

ただし,失われる情報も多くあるので,単純に見やすくするための整形を行いたい人は,この設定をするべきではありません。

自分の場合,htmlを生で見ないといけないこと自体が少ないので,このような設定をしています。

007みたいな連番をCtrl + a008となるようにする

ノーマルモードでCtrl + aを押すと,その行のカーソルより後ろに数字と見なされる文字列があったときに,一つ数を進める変更を行うことができます。 (逆はCtrl + x)

しかし,見出しの007のように0から始まっている数があった時,Vimはこれを8進数表記と見なし,008ではなく,010を返します。

僕の場合8進数を使いたいときよりも10進数を使いたいときの方が多いので

set nrformats-=octal

として8進数と見なさないようにしています。

カーソル下がファイル名だった時,gxキーで適切なアプリケーションで開く

gxキーを押すと,そのカーソル下のURLを表示できますが,その表示のために使うプログラムを,xdg-openにすることで,適切に開くことができます。

let g:netrw_browsex_viewer="xdg-open"

Linuxの場合xdg-openが無難なチョイスかと思いますが,他にもgnome-openや,Macならopenでいいと思います。

See: :h netrw_filehandler

タブ,ファイル末尾,ラップ表示の記号の設定

タブ文字やファイル末尾,ラップされた行頭はそれとわかるように記号が付けられていると便利なことがあります。

以下のように設定しています。

" show Tab and Space at end of the line
set list listchars=tab:▸\ ,trail:~

" showbreaks
set showbreak=\ ↪

あまりごちゃごちゃし過ぎもしないくらいの情報量がいいのではないかと思います。

See: :h lcs

キーバインドの設定

Qキーでカーソルしたの文字列をシェルスクリプトとして実行,標準出力を挿入

nnoremap Q !!$SHELL<CR>

最近入れたキーバインドなのですが,大変便利です。

たとえば,連番を挿入したいなぁというとき

seq 1 10

と打ってからその行でQを押すと,

1
2
3
4
5
6
7
8
9
10

となります。 もちろん:r ! <command>としても同じことが出来るのですが,ファイル自体にこのコマンドを記述したままで保存しておけるというのは大きな違いかなと思っています。

何かソフトウェアをインストールしてきたときに,その設定手順と実際に実行するコマンドをmarkdownファイル等にまとめておいて,順番にQキーを押していけばインストールが完了する,といった使い方もできます。

自分の中では簡易版Jupyter Notebookみたいな印象でよく使っています。

但し,自分のいるディレクトリはよく確認しておく必要があります。

移動系

ラップされた行を矢印キーでなら動けるようにする

j,kで動けるようにしてもよかったのですが,ラップ単位ではなく実際の行で動いた方が便利なことも多いので,そこまではしませんでした。

それから最近は矢印キーをほんとに使わなくなってきたので,設定はしましたがgjgkで移動しています。

" move in wrapped line by arrow key
nnoremap <Down> gj
nnoremap <Up> gk

行頭からhで前の行の末尾/行末からlで次の行の行頭に

" move from line head to line end
nnoremap h <Left>zv

" move from line end to line head
nnoremap l <Right>zv


これは自分の中でかなり重要度の高い設定です。

インサートモード時Ctrl + h/j/k/lでカーソル移動

これも設定した当時は便利だと思って使っていたのですが,すぐにエスケープしてカーソル移動する癖が身についてきたので,あまり使わなくなってきた設定の一つです。

" cursor moved in insert mode
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-h> <Left>
inoremap <C-l> <Right>

エスケープ2回押しで検索ハイライトを消す

nnoremap <silent> <ESC><ESC> :nohlsearch<CR>

ハイライトが残ったままだと気持ちよくないので,エスケープを繰り返し2回押せばハイライトが解除されるようにしています。nキー等を押せばハイライトは復活します。

カーソル下のファイルを新しいタブで開く

Vimのデフォルトではカーソル下がファイル名のときgfと押すと,現在のウィンドウの新しいバッファにそのファイルを開いて表示します。Ctrl + w gFとすると,新しいタブで開かれます。

僕としては新しいタブで開かれるという挙動の方が嬉しかったので,gfキーで新しくタブを作成してファイルを開くようにしました。

また,gFキーで,まだ存在していないファイルの場合も新しいタブで新しいファイルを作成できるようにしました。 コメントで構造を残しておけば一つファイルを開けばシームレスに必要なファイルを呼び出すことができて便利だと思います。

" open the file in new tab
nnoremap gf <C-w>gf
" create the file and open in new tab
nnoremap gF :tabedit <C-r><C-f><CR>

うっかり日本語で打ってしまったミスをカバーする

これはQiitaで@igrepさんの全角アルファベットやひらがな・カタカナを入力しても(ちょっと)いい感じに解釈してくれるvimrc - Qiitaというのをみてインスパイアされて設定したものです。

日本語のままエスケープしてコマンドをかな入力のまま打ってしまっても,いいかんじに解釈してくれる,というコンセプトそのままです。

" for Japanese IME mode
nnoremap あ a
nnoremap い i
nnoremap う u
nnoremap え e
nnoremap お o
nnoremap っd dd
nnoremap っy yy
nnoremap し” ci"
nnoremap し’ ci'
nnoremap せ ce
nnoremap で de
inoremap <silent> っj <ESC>

nnoremap っz zz
nnoremap ・ /

今後増やしていってもいいのですが,<F10>キーとか押せば全部半角英数に変換されるので,そのままエンター押せばそのコマンドを実行できます。

括弧を挿入したらカーソルを中に移動する

これは割とよく見るかもしれないので新しさはないですね。

" quote and bracket
inoremap {} {}<Left>
inoremap [] []<Left>
inoremap () ()<Left>
inoremap "" ""<Left>
inoremap ”” ””<Left>
inoremap '' ''<Left>
inoremap ’’ ’’<Left>
inoremap <> <><Left>
inoremap $$ $$<Left>

まとめ

Vimの基本設定についてまとめてみました。 これで全部ではないので,詳しく見たい方は冒頭に張っておいたリンクから飛んでください。

それから今回の内容とは関係ないですが,Vim力を上げるには低スペックのPCにで修行するといいと思います。 というのも,カーソル移動などをh連打等でやっていたら遅くなってしまうような環境であればあるほどf,tw,eなどを活用できるようになると思うからです。

さて,次回はVimプラグインに関して,何を使っているか,どういった設定をしているかざっと紹介していきたいと思います。

ありがとうございました。