Katsuo Pages

Katsuoのサイト

View My GitHub Profile

vimrcについてのメモ

主にvimrcの設定内容についてメモ。 どこかからコピペして作ることが多く、内容がわからないまま設定している項目も多いので、 設定した内容についてメモや説明など。基本的に便利だと思って実際に設定する設定だけメモする。


vim9script

vim9仕様にする。vim8->vim9へのバージョンアップでいろいろ仕様変更されている。
下位互換を保ちつつvim9仕様の機能が使える。

vimrcファイルの一番最初に書いておく必要がある。


set encoding=utf-8

vim内部のエンコーディングをutf-8に設定。


scriptencoding utf-8

vim scriptのエンコーディングをutf-8に設定。


set fileencodings=ucs-bom,utf-8,iso-2022-jp,cp932,euc-jp

既存のファイルを開いた時に、ファイルのエンコーディングの設定項目であるfileencoding
を、決めるための設定。fileencodingsに設定した順にエンコーディングし、エンコーディングのエラーが発生しなかったものが
そのファイルのfileencodingのエンコードの種類として設定される。

ファイルを作成で新規に開いた場合は、fileencodingのグローバル設定値が適用される。

ucs-bomは文字コードのひとつであるucsにBOMの情報を付与したもの。BOMはファイルがビッグエンディアンかリトルエンディアンかの情報を付与するためのもの。

BOMはByte Order Markの略。

Unicodeを実現するためにUCSができたが、いまいちだったみたいで、そこからより優れた方式としてUTFが作られた。

iso-2022-jpとは、日本の文字を表現するための文字コードで、JISコードと呼ばれるものの正式名称。

cp932も日本の文字を表現するための文字コードで、マイクロソフトがshift_jisをもとに拡張したもの。shift_jis自体も日本の文字を表現するするための文字コード。

euc-jpも日本の文字を表現するための文字コードで、主にunix環境でOSが日本語を扱うときに利用される文字コード。


set number

vimの左側に行番号を表示する。

syntax on

プログラミング言語など内容に合わせて色を変えて表示されるのでソースコードが見やすくなる。

古いバージョンのvimだとこの設定は存在しない。

set incsearch

文字の検索を入力している途中でテキスト中の候補に飛び表示される。

set hlsearch

検索でヒットした文字を強調表示する。 検索後もハイライトされたままやウザいみたいなのを見かけるので設定はしない。 あとで忘れてまた設定してしまいそうなのでメモとして書いておく。


set smartcase

/aのように小文字で検索したら小文字にも大文字にもヒットするけど /Aのように大文字で検索したら大文字にヒットするけど小文字にはヒットしない設定。


set autoindent

ひとつ前の行のインデントに合わせてインデントを入れてくれる。


set smartindent

autoindentと同じだがいくつかのC構文を認識し適切な箇所のインデントを増減させてくれる。


set breakindent

折り返した行の先頭位置を揃えてくれる。例えば、1行が100文字もあって、70文字で折り返されるとき、折り返された行の先頭がそろう。

 //abcdefghijという1行が下記のように折り返される
 abcdefg
 hij


set showmatch

()を入力の際に、対応するかっこに一瞬飛んで、対応するカッコがどこにあるのか分かりやすくする。

デフォルトでは0.5秒、対応するカッコに飛ぶが、少々長いらしく、set matchtime=1とするとちょうどよいらしい。なので、showmatchとセットで設定しておく。


set backspace=indent,eol,start

backspaceキーを押しても効かない場合は設定する。

PCによってはたまにデフォルトではbackspaceキーが無効になっていることがある。

設定の意味:

startについては日本語では”カーソルよりも前”と書いてあってどっちにも解釈できるので 説明がわかりにくいけど、カーソルの後ろ。つまり普通のbackspaceキーの動作のこと。 vimは普通のbackspaceの動作がデフォルトでは効かなかったりする。

下記のように数値でも設定できる。

set backspace=0 //set backspace= と同じ
set backspace=1 //set backspace=indent,eolと同じ
set backspace=2 //set backspace=indent,eol,startと同じ


set history=200

コマンドの履歴と検索履歴を200個ずつ残す。


set ruler

現在のカーソル位置(行,列)を画面の右下にずっと表示する。


set laststatus=2

画面最下部のステータスラインを2に設定すると常にステータスラインが表示される。


set showcmd

入力中のコマンドの文字をステータスラインに表示する。入力が完了=エンターキー押してコマンドが実行されると表示は消える。


set wildmenu

コマンドを入力してtabを押したときにコマンドの候補がステータスラインに表示される。


set virtualedit=onemore

行末で通常はカーソルは最後の文字の上にあり、それ以上右に移動できないけど、 設定することで行末の最後の文字の1文字先にカーソルが移動できる。

この設定していないと、使っていて何気にストレスになるので、やっておいてよかった。


filetype plugin indent on

filetypeの検出、ファイルタイププラグインの適用、ファイルタイプに合わせたインデントの自動調整


DiffOrigコマンド

下記を記述することでDiffOrigコマンドがつかえるようになる。

command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
                  \ | wincmd p | diffthis

下記コマンドを実行することで、差分モードで表示される。 変更前とこれから変更するファイルが同時に左右に表示され、新しく変更するとそこがハイライトされる。

プログラミングしていて変更点を確認したい場合は便利。

:DiffOrig


packadd! matchit

デフォルトで入っているけど無効になっているmatchitプラグインを有効にする。

有効にすると、’%’キーを押したときに()だけでなくif/endifなどの組み合わせにも

ハイライトが対応できるようになる。


set so=5

画面のスクロールをしたときに、画面の上下からセットした値分の行数でカーソル位置が

止まった状態になり、画面の端までカーソルが行かなくなった状態でスクロールできるので画面が見やすくなる。

10行だと多すぎて逆に違和感あったので、5行に設定した。5行が適当かなと思いました。


set cursorline

カーソルがある行全体をハイライトしてくれる。

最初のころは設定していなかったけど、これは何気に見やすくなるのでよさげな設定です。


set clipboard+=unnamed

通常はVimの*レジスタとOSのクリップボードが連動してるので、

vim以外のとこからコピーした文字列をVimにペーストでき、vimでヤンクした文字列をvim以外のところにペーストできる。

ただし、put, yankの都度*レジスタを指定しないと動作しないので、慣れないと大変。

この問題を解決できるのがこの設定。yank, putするときにクリップボードを使用できるので便利。


inoremap jj

inoremap <silent >jj <ESC>

インサートモードでESCにjjをキーマッピング

insertモードでjjでノーマルモードに抜けれるので便利。

特にESCキーが遠いキーボードの場合はかなり便利。

set pasteを設定しているとこのキーマッピングが効かないので注意。


set nowritebackup

ファイル上書き保存前にバックアップを作ることを無効にする。

不要そうな機能でデフォルトで有効のままだと処理のオーバーヘッドになりそうな気もするので

無効にしておく。必要そうなら再度設定すればよい。


set nobackup

保存時にバックアップファイルを作らない。 nowritebackupとセットで設定しておくとよさそう。


set noswapfile

swapfileを作らない。


undoの永続化

ファイルを閉じると変更履歴が消えてしまうので、一度ファイルを閉じて開き直したら閉じる前に行ったundo操作は

できないけど、これをできるように設定する。

> mkdir ~/.vim/undo


if has('persistent_undo')
	let undo_path = expand('~/.vim/undo')
	exe 'set undodir=' .. undo_path
	set undofile
endif  


set wrapscan

検索したとき最後の検索まで行ったらまた最初の検索文字に戻る(ループ)する設定。


set hidden

複数のテキストファイルを開いている状態でファイルを切り替えるときは保存しないとファイルの表示を

切り替えることができないけど、保存していなくてもファイル表示の切り替えができるようになる設定。


set shiftwidth=4

を入力したとき挿入されるtabがspace何個分にするかを設定。

例)

まずshift vでインデントしたい行を選択する。

次に、>を入力するとインデントされるが、このときのスペースを何個分にするかを設定できる。


set paste

webからソースコードなどをvimにコピペしたとき変なインデントなどが勝手に入ってしまう

ことを防止できる設定。これを設定するとinoremap jj が動作しなくなるので注意。


set nf

normalモードでctrl+aを押すと数字をインクリメントしてくれるが、デフォルトだと、例えば007とすると8進数とvimが認識しているので、
インクリメントすると007の次が010になる。この挙動を防止するために、下記を設定する。

nrformats(nf)で、ctrl+aでのインクリメントで使用するフォーマットを指定できる

set nf=alpha,hex //アルファベットと8進数をインクリメントから除外する


set display=lastline

1行が長く、1行だけど複数行で表示されて画面に収まらなかった文字が@@@などと@で表示されずちゃんとすべて表示されるようにするための設定。


set pumheight

入力補完の表示の行の高さを設定できる。デフォルトでは0となっていて、画面の一番下まで表示される。

set pumheight=10

デフォルトだと補完が画面の下いっぱいまで占領して見栄えが良くないので、設定しておく。


set belloff

ビープ音またはビジュアルベルが発生するイベントはvimにはたくさんある。よく見るのが最下段の行でjを押したりnormalモードでESCを押したとき。 ベルは基本的に不要なのですべてのイベントのベルをオフにしておく。

set belloff=all


set ttimeoutlen

ttimeoutlenでキーコード押下時の反応時間を設定できる。例えば左矢印キーを押したときは、ターミナルからvimへ^[O*Dというキーコードが送出される。 ttimeoutlenの値は、デフォルトでttimeoutlen=100で100ミリ秒という短い時間となっているが、パソコンの処理能力等の関係から、もっと速めても問題ない。

逆に遅くする場合は、極端に処理が遅いターミナルを使っている場合など。その場合はタイマーの時間内にキーコードが送出されず、時間切れで押したキーが
無効になったりする(推測だが)ので、システムに合わせて遅くすることで解消できる。

set ttimeoutlen=50


set autochdir

カレントディレクトリが適切になる。開いたり選択したファイルを含んでいるディレクトリがカレントディレクトリになる。


autocmd

autocmdでイベントに対し自動的に実行する処理を作ることができる。
イベントについては、:help {event} で確認できる。

自動的に処理をさせたい時に便利そうなので、継続的に調べて活用。

書式:
:au[tocmd] [group] {event} {イベント} [++once] [++nested] {コマンド}

autocmdの使用例:

autocmd BufNewFile * put ='#start editing new file'
//vim sample.txtのように新規ファイルを編集しだすと上記の文字列が自動的に挿入される

augroupとは:
autocmdをグループ化できる。

任意のグループとして下記のように自動コマンドを定義する。

  1. “:augroup {name}” によってグループを選択する。
  2. “:au!” で古い自動コマンドを全て消去。
  3. グループの名前で使いたい自動コマンドを定義する。
  4. “:augroup END” で既定のグループに戻る。

上記によって、自動コマンドが2回定義されてしまうことを防止できる。

augroup NewFileEdit
        au!
        au BufNewFile * put ='#start editing new file'
augroup END