素のままのVimを強制されても最低限これだけは設定したいvimrc

# プラグインはいらないから、最低限これだけは設定させて欲しい

プラグインとか自由に設定できないターミナルでvimを操作しないといけない場合、非常にストレスが溜まる。

そのあたりをなんとかするための、最低限の設定

超個人用なので初心者向けではないかもしれませんが、一応、後半に解説を入れています。

## .vimrc

```vim
" 基本設定
set nobackup
set noswapfile
set smartindent
set fenc=utf-8
set autoread
set hidden

" 操作に関する設定
inoremap <silent> jj <ESC>
nnoremap j gj
nnoremap k gk
set whichwrap=b,s,h,l,<,>,[,]
nmap <Esc><Esc> :nohlsearch<CR><Esc>
set wildmode=list:longest

" 分割画面サイズを最大化するヤツ
let g:toggle_window_size = 0
function! ToggleWindowSize()
  if g:toggle_window_size == 1
    exec "normal f="
    let g:toggle_window_size = 0
  else
    :resize
    :vertical resize
    let g:toggle_window_size = 1
  endif
endfunction
nnoremap <silent> fz :call ToggleWindowSize()<CR>

" 表示に関する設定
syntax enable
set nowrap
set t_Co=256
set cursorline
set number
set conceallevel=0
let g:vim_json_syntax_conceal = 0
if has('vim_starting')
    let &t_SI .= "\e[6 q"
    let &t_EI .= "\e[2 q"
    let &t_SR .= "\e[4 q"
endif
colorscheme elflord

" 入力に関する設定
set backspace=indent,eol,start
set list listchars=tab:\?\-
set expandtab
set tabstop=2
set shiftwidth=2
nnoremap ( 0
nnoremap ) $

" 検索に関する設定
set ignorecase
set incsearch
set wrapscan
set hlsearch

" バッファの変更
nnoremap <C-h> :bprevious<CR>
nnoremap <C-l> :bnext<CR>
nnoremap <C-w> :bdelete<CR>

" ウィンドウ分割
nnoremap <silent> fu <C-w>s
nnoremap <silent> fi <C-w>v

" ウィンドウ間の移動
nnoremap <silent> fh <C-w>h
nnoremap <silent> fj <C-w>j
nnoremap <silent> fk <C-w>k
nnoremap <silent> fl <C-w>l

" ウィンドウの移動
nnoremap <silent> fH <C-w>H
nnoremap <silent> fJ <C-w>J
nnoremap <silent> fK <C-w>K
nnoremap <silent> fL <C-w>L
```

## 一応、個々の設定の説明とか

### 3.1. 基本的な挙動に関する設定

```vim
set nobackup   
set noswapfile 
set smartindent
set fenc=utf-8
set autoread
set hidden
```

この部分では、主にファイルオープンやファイル作成に関わる設定を記述しています。
通常のテキストエディタ等の挙動に近づけるように設定されています。

- `nobackup`, `noswapfile`
  - バックアップファイル及びスワップファイルを作成するかどうか。
  - 不要なファイルの残留を無くすために、作成しないよう設定
- `smartindent`
  - 改行時、自動で最適なインデントが挿入される。
- `fenc=utf-8`
  - 使用する文字コードに`UTF-8`を指定
- `autoread`
  - 現在開いている未編集ファイルが外部で編集された場合に再読込を行う。
  - ログファイルなどを Vim で見る際、追記・編集が自動で反映されるようになる。
- `hidden`
  - 編集したファイルが未保存であっても、別のファルを開けるようにする。

### 操作に関する設定

```vim
inoremap <silent> jj <ESC>
nnoremap j gj
nnoremap k gk
set whichwrap=b,s,h,l,<,>,[,]
nmap <Esc><Esc> :nohlsearch<CR><Esc>
set wildmode=list:longest
```

操作の簡略化や、違和感を低減するための設定です。

- `inoremap <silent> jj <ESC>`
  - 入力モードのオフを、ESC の他に`jj`でも出来るようにする。
  - 入力を高速にするための設定。自分に合わないようであれば削除も可
- `nnoremap j gj`, `nnoremap k gk`
  - 行が折り返した場合、表示行の単位でのカーソル移動を可能にする。
- `set whichwrap=b,s,h,l,<,>,[,]`
  - 行末から行頭、行頭から行末へのカーソル移動を可能にする。
- `nmap <Esc><Esc> :nohlsearch<CR><Esc>`
  - 検索結果のハイライトを、ESC キー連打で解除する。
- `set wildmode=list:longest`
  - コマンドに入力するファイル名のタブ補完をイイ感じにする。

### 分割画面サイズを最大化するヤツ

関数を設定して、`f z`と入力することで、分割したウィンドウを最大化・元に戻すをトグルします。

ターミナルの表示サイズが十分ではない場合に重宝します。

### 表示に関する設定

```vim
syntax enable
set nowrap
set statusline=%F%m%h%w\ %<[ENC=%{&fenc!=''?&fenc:&enc}]\ [FMT=%{&ff}]\ [TYPE=%Y]\ [POS=%l/%L(%02v)]            
set laststatus=2
set t_Co=256
set cursorline
set number
autocmd ColorScheme * highlight LineNr ctermfg=8 ctermbg=235
set conceallevel=0
let g:vim_json_syntax_conceal = 0
if has('vim_starting')
    let &t_SI .= "\e[6 q"
    let &t_EI .= "\e[2 q"
    let &t_SR .= "\e[4 q"
endif
colorscheme elflord
```

見た目がショボイのを何とかする設定です。
一部、表示に関わる問題を解決するための設定も含みます。

- `syntax enable`
  - シンタックスハイライトを有効にする。
- `set nowrap`
  - 長い業の折返しを無効化する。
  - 業の長いログファイルや複雑なコードを見る際に役立つが、編集時には不便な場合もある。
  - 好みに応じて削除してもよい。
- `set statusline=~`, `set laststatus=2`
  - 画面下部にステータスラインを常に表示させる。
  - 表示する情報は、ファイルフォーマット、文字エンコード、ファイルタイプ及びカーソル位置
- `set t_Co=256`
  - 256 色カラーを使用する。
- `set cursorline`
  - 現在のカーソル行をハイライトする。
- `set number`, `autocmd ColorScheme * highlight LineNr ctermfg=8 ctermbg=235`
  - 行番号を表示する。また、行番号のみ表示色を変更する。
- `set conceallevel=0`, `let g:vim_json_syntax_conceal = 0`
  - JSON のダブルクォーテーションが一部のプラグインで消える問題を解決する。
- `if has ~ endif`
  - カーソルの形状を、入力モード時はライン、非入力モード時はブロックにする。
- `colorscheme elflord`
  - カラーテーマを`elflord`に設定する。
  - デフォルトで使用できるテーマ一覧：`https://nanasi.jp/colorscheme/default_install.html`

### 入力に関する設定

```vim
set backspace=indent,eol,start
set list listchars=tab:\?\-
set expandtab
set tabstop=2
set shiftwidth=2
nnoremap ( 0
nnoremap ) $
nnoremap <S-w> b
nnoremap <S-e> ge
```

入力モード時の挙動に関わる部分です。

- `set backspace=indent,eol,start`
  - 入力モード中、Backspace キーで文字を消せるようにする。
- `set list listchars=tab:\?\-`
  - タブが入力されている場合、`\?\-`で視覚化する。
- `set expandtab`
  - タブ入力をスペースにする。
- `set tabstop=2`, `set shiftwidth=2`
  - タブキーを入力した場合のスペースの数を２に設定する。
- `nnoremap ( 0`, `nnoremap ) $`
  - 行頭・行末への移動キーを変更する。
- `nnoremap <S-w> b`, `nnoremap <S-e> ge`
  - 単語単位の移動キーを変更する。

### 検索に関する設定

```vim
set ignorecase
set incsearch
set wrapscan
set hlsearch
```

検索を使いやすくするための設定です。

- `set ignorecase`
  - 検索時、入力が全て小文字の場合は、大文字小文字の区別を無視する。
- `set incsearch`
  - インクリメンタルサーチ（入力文字の逐次検索）を有効化
- `set wrapscan`
  - ファイル末尾まで検索した後、ファイル先頭に循環する。
- `set hlsearch`
  - 検索にヒットした部分をハイライトする。

### バッファとウィンドウに関する設定

```vim
" バッファの変更
nnoremap <C-h> :bprevious<CR>
nnoremap <C-l> :bnext<CR>
nnoremap <C-w> :bdelete<CR>

" ウィンドウ分割
nnoremap <silent> fu <C-w>s
nnoremap <silent> fi <C-w>v

" ウィンドウ間の移動
nnoremap <silent> fh <C-w>h
nnoremap <silent> fj <C-w>j
nnoremap <silent> fk <C-w>k
nnoremap <silent> fl <C-w>l

" ウィンドウの移動
nnoremap <silent> fH <C-w>H
nnoremap <silent> fJ <C-w>J
nnoremap <silent> fK <C-w>K
nnoremap <silent> fL <C-w>L
```

ウィンドウの分割操作とバッファの変更操作に関する部分です。

このあたりは個人の好みなので、あまり参考にはならないと思います。