.vimrc 設定

#.vimrc のメモ

Windows の gvim などでは、.gvimrc としないと colorscheme は反映されないので注意。
なので、vim と gvim を併用する場合は、colorscheme のみ .gvimrc に分離して、残りを .vimrc に書いておくとよい。

```vim:.vimrc
set number

" エラーでベルを鳴らさない
set noerrorbells

" 文字コード & 改行コード
:set ts=4
" 文字コードの自動認識
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

"" 文字コードを指定して開き直す
"" :e ++enc=shift_jis

filetype on
if has("audocmd")
    autocmd FileType c,cpp,perl setlocal cindent
    autocmd FileType python setlocal tabstop=4 noexpandtab smarttab=on
endif

"-------Search--------
"インクリメンタルサーチを有効にする
set incsearch

"大文字小文字を区別しない
set ignorecase

"大文字で検索されたら対象を大文字限定にする
set smartcase

"行末まで検索したら行頭に戻る
set wrapscan

"括弧の対応をハイライト
set showmatch

"検索結果をハイライトする
set hlsearch

"ルーラー,行番号を表示
set ruler
set number

"ステータスラインにコマンドを表示
set showcmd

"ステータスラインを常に表示
set laststatus=2

"ファイルナンバー表示
"set statusline=[%n]

"ホスト名表示
set statusline+=%{matchstr(hostname(),'\\w\\+')}:

"ファイル名表示
set statusline+=%<%F

"変更のチェック表示
set statusline+=%m

"読み込み専用かどうか表示
set statusline+=%r

"ヘルプページなら[HELP]と表示
set statusline+=%h

"プレビューウインドウなら[Prevew]と表示
"set statusline+=%w

"これ以降は右寄せ
set statusline+=%=

"現在行数/全行数
set statusline+=[L%l/%L]

"文字コード
"set statusline+=[ASCII:\%06.6b][HEX:\%04.4B]
set statusline+=[HEX:\%04.4B]

"ファイルフォーマット表示
set statusline+=[%{&fileformat}]

"文字コード表示
set statusline+=[%{has('multi_byte')&&\&fileencoding!=''?&fileencoding:&encoding}]

"ファイルタイプ表示
set statusline+=%y

" 色テーマを指定
syntax enable
" どれか入っていないかな？
colorscheme evening
colorscheme koehler
colorscheme wombat256mod
colorscheme apprentice
colorscheme moonshine
colorscheme antares

"文字コードや改行コードが違っているとファイルを壊すので注意
"vim: set ts=4 fenc=utf-8 ff=unix ft=vimrc : モードライン
```
文字コード判別部分は [文字コードの自動認識](http://www.kawaz.jp/pukiwiki/?vim#cb691f26) からの盗用。

## colorscheme 
カラースキームの wombat は [Customizing GVim in Windows 7](https://benaiah41.wordpress.com/2012/01/17/customizing-gvim-in-windows-7/) から。
と思ったけど、[gruvbox](https://colorswat.ch/vim/schemes/gruvbox) にしてみた。プログラムの時の色は良いけども、普通のテキストファイルの時のバックは明るすぎるなぁ。残念。

- evening<br/>
デフォルトでインストール？
- koehler<br/>
デフォルトでインストール？
- [wombat256, wombat256mod.vim](https://www.vim.org/scripts/script.php?script_id=2465)
wombat256 だと、ターミナルの vim でも使えるらしい。

- [romainl/Apprentice](https://github.com/romainl/Apprentice)
- [karoliskoncevicius/moonshine-vim](https://github.com/karoliskoncevicius/moonshine-vim)
- [Haron-Prime/Antares](https://github.com/Haron-Prime/Antares)



## 文字コード
### 現在の文字コードを表示
```vim:
:set enc?
```
### 文字コードを指定して開きなおす
```vim:
:e ++enc=utf-8
:e ++enc=euc-jp
:e ++enc=iso-2022-jp
:e ++enc=sjis
```
### 文字コードを指定して保存
```vim:
:set fileencoding=sjis
:w
```

## 改行コード
### ファイルの改行コードを表示
```vim:
:set fileformat?
省略形
:se ff?
```
### 改行コードを指定してファイルを開きなおす
```vim:
:e ++ff=mac
:e ++ff=dos
:e ++ff=unix
```
### 開いているファイルの改行コードを変更して保存
```vim:
:se ff=unix
:w
```

# screen を手動でアップデート
Raspberry Pi を使ってると screen の日本語の扱いがあれなので手動で入れる。
そもそも、GNU screen は 4.6.2 (2017/10/23) が出てるのに Raspberry Pi の screen は 4.5.0 (2017/01/17) なので手動で導入しようかなと。
2022-02-02 4.8.0 がリリースされました。
.screenrc もどこかに置いておかないと → [github](https://github.com/jp-yen/dotfiles/blob/main/screenrc)

```tcsh:
> apt list screen
Listing... Done
screen/stable,now 4.5.0-6 armhf [installed]
```
[IIJ の ftp サーバ](ftp://ftp.iij.ad.jp/pub/gnu/screen/) ftp://ftp.iij.ad.jp/pub/gnu/screen/ から本体をダウンロード。

パッチは
https://rcmdnk.com/blog/2020/02/07/computer-screen/
以下、修正予定...
~~https://rcmdnk.com/blog/2014/07/13/computer-mac-homebrew-screen/~~
のページから
https://github.com/rcmdnk/homebrew-rcmdnkpac/blob/master/screenutf8.rb
を参照してみると、utmp のパッチはまぁ当てなくてもいいかな？と思うので、残りの 2つだけで当てればいいのかな？ということで、以下の二つを拾ってくる。

https://gist.githubusercontent.com/rcmdnk/b0bf57d422c875fb70645556d7770091/raw/26d43f3581a77d42027238a4f65130d4753944dc/screen-utf8-nfd.patch

https://gist.githubusercontent.com/rcmdnk/8a90eba829fd789a4e058492b494f862/raw/b3104ce355ed5ef17df77caa2af7d99c86a56457/screen-utf8-osc.diff

このパッチを wget して、パッチを当てる。

```tcsh:
> echo  screen-utf8-* | xargs -n 1 patch -p 1
> ./autogen.sh
> ./configure --prefix=$HOME/opt --enable-pam --enable-use-locale --enable-colors256 --enable-rxvt_osc
> make -j4
> make install
> sudo apt remove screen
> sudo install etc/screenrc /etc/screenrc

> file ~/opt/bin/screen-4.6.2
/home/pi/opt/bin/screen-4.6.2: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=e21ed43a26e1aae77e281a4f9b93e6ed956eea02, not stripped
> strip ~/opt/bin/screen-4.6.2
```
パッケージと混ざると面倒なので $HOME/opt 以下へインストール。
utf8 を使うときは screen -U としないといけない模様。
なので、.tcshrc で alias screen screen -U としておくと良いんじゃないでしょうか。
何故か strip されてなかったので strip しておく

#vim を手動でアップデート
vim もアップデート
8.0.0 (2016-09-12) → 8.1.1 (2018-05-18)

```tcsh:vim
> apt list vim
Listing... Done
vim/stable,stable,now 2:8.0.0197-4+deb9u1 armhf [installed]

> wget ftp://ftp.jp.vim.org/pub/vim/unix/vim-8.1.tar.bz2
> bzip2 -dc vim-8.1.tar.bz2 | tar xvf -
> cd vim81
> ./configure --prefix=$HOME/opt --enable-perlinterp=yes --enable-pythoninterp=yes  --with-python3-command=python3 --enable-terminal
> make -j4
> make install
```

#less を手動でアップデート
less 4.8.1 (2015-10-16) → 5.3.0 (2018-02-17)

```tcsh:less
> apt list less
Listing... Done
less/stable,stable,now 481-2.1 armhf [installed]
> wget ftp://ftp.iij.ad.jp/pub/gnu/less/less-530.tar.gz
> tar xzvf less-530.tar.gz
> cd less-530
> ./configure --prefix=$HOME/opt
> make -j4
> make install
> less -V
less 481 (GNU regular expressions)
Copyright (C) 1984-2015  Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less
> rehash
> less -V
less 530 (POSIX regular expressions)
Copyright (C) 1984-2017  Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less
```