vimrc」タグアーカイブ

vimで保存時に不要な行末スペースを削除する

概要

.vimrcに以下のコマンドを追加すると、ファイル保存時に、不要な行末スペースを自動で削除してくれる。

autocmd BufWritePre * :%s/\s\+$//ge

解説

autocmdは、vimで特定のタイミングで何らかのコマンドを実行させるコマンド。

第一引数に指定している”BufWritePre”は、コマンド実行のタイミング指定で、ファイルを保存する直前を意味する。他にもファイル保存直後や、新規ファイル作成時などのトリガがある。

第二引数”“は、対象となるファイル名のパターンを表す。例えばtxtファイルでのみ適用したい場合、.txtと指定すればよい。今回は全てのファイルにおいて動作させたいので”*”を指定する。

第三引数には、実行するコマンドを記述する。

:%s/\s\+$//ge

を紐解くと、ファイル内の全ての/\s+$/を空文字で置換するという記述で、行末の手前にあるスペースを削除するという意味になる。

以上より、

autocmd BufWritePre * :%s/\s\+$//ge

とvimrcに記述することで、全てのファイル保存時に、ファイル内の不要な行末スペースを削除するという機能をvimに追加することができる。

参考

[vim] 挿入モードで検索ハイライトを無効にする

概要

検索時のハイライトはありがたいけど、挿入する頃には鬱陶しいので消したい。
:nohを適当にマッピングしてもいいがそれも面倒くさい。

挿入モード遷移時に:nohを実行する

autocmdのInsertEnterを使えば、挿入モード遷移時に任意のコマンドを実行させられるので、ここでnohを叩かせる。

autocmd InsertEnter * :noh

が、ダメ。動作しない。

Why

ヘルプを叩いてみた。

:noh[lsearch]           Stop the highlighting for the 'hlsearch' option.  It
                        is automatically turned back on when using a search
                        command, or setting the 'hlsearch' option.
                        This command doesn't work in an autocommand, because
                        the highlighting state is saved and restored when
                        executing autocommands |autocmd-searchpat|.
                        Same thing for when invoking a user function.

autocommandでは機能しないってハッキリ書いてあった。

代替策

しかたないので、挿入モード移行時にはハイライト機能を無効にし、挿入モードを終了したら有効に戻すというアプローチを取る。

autocmd InsertEnter * set nohlsearch
autocmd InsertLeave * set hlsearch

いい感じに動いた。

vimで矢印キーを使う癖を矯正(強制)する

vimのカーソル移動についつい矢印キーを使ってしまう人に、vimで矢印キーは絶対使っちゃイケないんだと思い込ませるための設定。

nnoremap <Up>    :q!<CR>
nnoremap <Down>  :q!<CR>
nnoremap <Left>  :q!<CR>
nnoremap <Right> :q!<CR>
inoremap <Up>    <ESC>:q!<CR>
inoremap <Down>  <ESC>:q!<CR>
inoremap <Left>  <ESC>:q!<CR>
inoremap <Right> <ESC>:q!<CR>

一応解説すると、ノーマルモード挿入モード問わず、矢印キーを叩いてしまうとファイルを保存せずに閉じるので、矢印キーを使わないカーソル操作を強制できる。恐怖で支配する的なアレ。