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

Let's write β

趣味で書いたこととか、RustとLispが好き

Debian GNU/Linux インストール日記(5) Vimの基本設定

Debian GNU/Linux Vim

Vimのインストールが完了したらVimrcファイルを書いていって基本的な設定を行いましょう。

"構文ハイライト
syntax on
"Vi互換をオフ
set nocompatible
"行番号の表示
set number
"入力した括弧に対応する括弧のハイライト
set showmatch
"入力時に自動的に前の行と同じインデントに
set autoindent
"高度なインデントの設定
set smartindent
"C言語の高度なインデントをする
set cindent
"行頭の余白内でTabを打ち込むと,'shiftwidth'との数だけインデントする
set smarttab
"ファイル保存時にバックアップファイルを作成
set nobackup
"カーソルのある行番号の表示
set ruler
"入力したコマンドを最下行に出力
set showcmd
"インクリメンタルサーチを行う
set incsearch
"検索時に大文字を含んでいたら大文字小文字を区別しない
set nosmartcase
"特定拡張子の新規ファイルを作成したときのテンプレート
"autocmd BufNewFile *.html 0r $HOME/.vim/template/html.txt
"autocmd BufNewFile *.ps 0r $HOME/.vim/template/postscript.txt
"入力補完の設定
setlocal omnifunc=syntaxcomplete#Complete
"新規lispファイルを作成したときの設定
let lisp_rainbow = 1
autocmd FileType lisp set nocindent | set lisp | let lisp_rainbow = 1 
autocmd FileType scheme set nocindent | set lisp | let lisp_rainbow = 1
"command! Preview :!firefox %

" 文字コードの自動認識
if &encoding !=# 'utf-8'
  set encoding=japan
  set fileencoding=japan
endif
if has('iconv')
  let s:enc_euc = 'euc-jp'
  let s:enc_jis = 'iso-2022-jp'
  " iconvがeucJP-msに対応しているかをチェック
 if iconv("?x87?x64?x87?x6a", 'cp932', 'eucjp-ms') ==# "?xad?xc5?xad?xcb"
    let s:enc_euc = 'eucjp-ms'
    let s:enc_jis = 'iso-2022-jp-3'
  " iconvがJISX0213に対応しているかをチェック
  elseif iconv("?x87?x64?x87?x6a", 'cp932', 'euc-jisx0213') ==# "?xad?xc5?xad?xcb"
    let s:enc_euc = 'euc-jisx0213'
    let s:enc_jis = 'iso-2022-jp-3'
  endif
  " fileencodingsを構築
  if &encoding ==# 'utf-8'
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
    let &fileencodings = &fileencodings .','. s:fileencodings_default
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .','. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2
    if &encoding =~# '^?(euc-jp?|euc-jisx0213?|eucjp-ms?)$'
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .','. s:enc_euc
    endif
  endif
  " 定数を処分
  unlet s:enc_euc
  unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
  function! AU_ReCheck_FENC()
    if &fileencoding =~# 'iso-2022-jp' && search("[^?x01-?x7e]", 'n') == 0
      let &fileencoding=&encoding
    endif
  endfunction
  autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
  set ambiwidth=double
endif

"改行コードの自動認識"
set fileformats=unix,dos,mac
"Gauche対応のSchemeインデントを行う"
filetype indent on
aug Scheme
 au!
 autocmd FileType scheme set nosmartindent nocindent lispwords=define lisp
aug END
let is_gauche=1
"Lispファイルを開いたときの動作
aug Lisp
	au!
	autocmd FileType lisp set nocindent nosmartindent lisp
aug END

let g:use_xhtml = 1
let g:html_use_css = 1
let g:html_no_pre = 1

"バッファを自動的に保存"
autocmd InsertLeave *  silent! wall
set autowrite
autocmd CursorHold *  silent! wall
autocmd CursorHoldI *  silent! wall

nnoremap <C-w>h <C-w>h:call <SID>good_width()<Cr>
nnoremap <C-w>l <C-w>l:call <SID>good_width()<Cr>
nnoremap <C-w>H <C-w>H:call <SID>good_width()<Cr>
nnoremap <C-w>L <C-w>L:call <SID>good_width()<Cr>
function! s:good_width()
  if winwidth(0) < 84
    vertical resize 84
  endif
endfunction

"Ctrl-eで行末Ctrl-aで行頭
imap <C-e> <END> 
imap <C-a> <HOME>

"vimrcをリロード"
command! ReloadVimrc  source $MYVIMRC 


" lhs comments
vmap ,# :s/^/#/:nohlsearch
vmap ,/ :s/^/\/\//:nohlsearch
vmap ,> :s/^/> /:nohlsearch
vmap ," :s/^/\"/:nohlsearch
vmap ,% :s/^/%/:nohlsearch
vmap ,! :s/^/!/:nohlsearch
vmap ,; :s/^/;/:nohlsearch
vmap ,- :s/^/--/:nohlsearch
vmap ,c :s/^\/\/\\|^--\\|^> \\|^[#"%!;]//:nohlsearch

" wrapping comments
vmap ,* :s/^\(.*\)$/\/\* \1 \*\//:nohlsearch
vmap ,( :s/^\(.*\)$/\(\* \1 \*\)/:nohlsearch
vmap ,< :s/^\(.*\)$//:nohlsearch
vmap ,d :s/^\([/(]\*\\|\)$/\2/:nohlsearch 

" block comments
vmap ,b v`k0i/*`>j0i*/
vmap ,h v`k0i

"クリップボードの同期
set clipboard+=autoselect
set clipboard+=unnamed

"Esc二回でハイライトを消す
nnoremap  <Esc><Esc> :nohlsearch<CR><Esc>

"マウスを使う
set mouse=a
set ttymouse=xterm2

if has('gui_running')
	set mousemodel=popup
	set nomousefocus
	set mousehide
endif
"タイプ認識を有効か"
filetype plugin indent on
"neocomplcacheを使う
let g:neocomplcacheenableatstartup = 1

"Vimの戦闘力を計算する
function! Scouter(file, ...)
	let pat = '^\s*$\|^\s*"'
	let lines = readfile(a:file)
	if !a:0 || !a:1
		let lines = split(substitute(join(lines, "\n"), '\n\s*\\', '', '\g'), "\n")
	endif
	return len(filter(lines,'v:val !~ pat'))
endfunction
command! -bar -bang -nargs=? -complete=file Scouter
\ 	echo Scouter(empty(<q-args>) ? $MYVIMRC : expand(<q-args>), <bang>0)
"ファイル名を変更して開き直す
command! -nargs=1 -complete=file Rename f <args>|call delete(expand('#'))
"別名のファイルを保存してそちらを開く
command! -nargs=1 -complet=file Copy f <args>|call copy(expand('#'))
"全角文字の幅を2マス分にする
set ambiwidth=double
"フォーマットオプションを設定する
set formatoptions=tcroqlM1
"削除方法の設定
set backspace=indent,eol,start
"ステータスラインを表示
set laststatus=2 " ステータスラインを表示  
set statusline=%<[%n]%m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).':'.&ff.']['.&ft.']'}\ %F%=%l,%c%V%8P  

大分Vim-users.jpの記事の情報を参考にしているので自分でもなにがなにやらな部分がありますが僕は此れでつかっています。

次の記事では便利なVimプラグインを紹介していきたいとおもいます。

僕が働いているAzit.incでは一緒に働けるエンジニアを募集しています!
採用情報 — 株式会社アジット|Azit Inc.