■概略
オープンソースエンジニア歴30年超の筆者が2023年からIBMiを学びだした学習記録です
IBMiの開発環境をvim+tmuxで構築します
筆者はあまりSEUに詳しくありませんが、行単位でコピー&ペーストできるところとか、
I{数字}で行の挿入ができるところとかvimに通じるところがあると感じています
SEUユーザはVSCodeよりvimの方が馴染むのでは…?(ちょっと無理やりかも…)
■vim+tmuxの使い方
1) starttmux.bash(後述)を起動すると以下の画面になる
筆者はWindows Terminalでフォント大きめ、1つ目のタブでvim+tmux、
2つ目をコンパイル用で開いている
$ ./starttmux.bash
2) windowの切り替え
[Ctrl-e]+[w] で下記windowの切り替え画面が表示される
[k] で上 [j]で下に移動し、[enter]で切替えるwindowを選択する
筆者はQFFRPG編集用、bashスクリプト編集用、git作業用、md(README.md等)用の
windowを用意している
bashスクリプト実行用はコンパイルリストが長くスクロールが必要なので別タブに
している
3) vimの起動とvimfilerの起動
windowを切り替えたら、vimを起動する
$ vim
vim内で :e . でvimfilerを起動すると以下の画面になり選択したファイルを開ける
:e .
◯vimfilerの操作
キー | 操作内容 |
---|---|
h | 親ディレクトリに移動 |
t | ディレクトリを展開 |
[enter] | ファイルを開く/ディレクトリに入る |
N | ファイルを新規作成 |
K | ディレクトリを新規作成 |
cc | ファイルをコピー |
r | ファイルをリネーム |
4) vimの操作
vimmerはそれぞれの操作を持っているが、筆者のよく利用する操作は以下
特に左右分割が便利
■vimの操作
キー | 操作内容 |
---|---|
h | 親ディレクトリに移動 |
hjkl | カーソル移動 |
yyかy{n}y | コピー |
p | ペースト |
[shift]-[k]か[j] | 行選択 |
[Ctrl-v]-[h][j][k][l] | 矩形選択 |
^ | 行先頭移動 |
$ | 行末移動 |
:1 | ファイル先頭移動 |
G | ファイル末尾移動 |
:set number | 行番号表示 |
:vs | 左右分割 |
[Ctrl-w]-[h]か[l] | 左右ペイン移動 |
:sp | 上下分割 |
[Ctrl-w]-[j]か[k] | 上下ペイン移動 |
:q | ペイン終了 |
5) tmuxを抜ける
[Ctrl-e]+[d] でtmuxを抜け、$に戻るのでログアウト等する
6) 再度ログインし、tmuxに接続する
再度sshログインし $ になったら、以下コマンドで残っているtmuxセッションに
再接続する
$ tmux a -t as400dev
7) RPGLEソース(桁位置固定)を開いた時
VSCodeで縦線を表示したように、vimでも縦線を表示できる
◯設定手順
~/.vim/ftdetectディレクトリに各拡張子用の設定を作成する
{ユーザ}@as400dev:~/.vim/ftdetect$ pwd
/home/{ユーザ}/.vim/ftdetect
{ユーザ}@as400dev:~/.vim/ftdetect$ ls
clp.vim rpg.vim rpgle.vim
clp.vim
" my filetype file
augroup filetypedetect
au! BufRead,BufNewFile *.clp setfiletype clp
au! BufRead,BufNewFile *.CLP setfiletype clp
au! BufRead,BufNewFile *.clle setfiletype clp
au! BufRead,BufNewFile *.CLLE setfiletype clp
augroup END
rpgle.vim
" my filetype file
augroup filetypedetect
au! BufRead,BufNewFile *.rpgle setfiletype rpgle
au! BufRead,BufNewFile *.sqlrpgle setfiletype rpgle
au! BufRead,BufNewFile *.RPGLE setfiletype rpgle
au! BufRead,BufNewFile *.SQLRPGLE setfiletype rpgle
augroup END
.vimrcにどの桁位置に色をつけるか設定する
" ### 縦線を引く
autocmd FileType clp set colorcolumn=14,70
autocmd FileType clp highlight ColorColumn term=reverse ctermfg=white ctermbg=2
autocmd FileType rpgle set colorcolumn=6,12,26,36,50,68,81
autocmd FileType rpgle highlight ColorColumn term=reverse ctermfg=white ctermbg=2
■vimの設定
筆者は古い人なのでNeoBundleを今でも使っています
1) /home/{ユーザ}/.vimrcに以下を作成する
set enc=utf-8
set fenc=utf-8
set nobackup
set noswapfile
set ambiwidth=double
set paste
" ### 縦線を引く
autocmd FileType clp set colorcolumn=14,70
autocmd FileType clp highlight ColorColumn term=reverse ctermfg=white ctermbg=2
autocmd FileType rpgle set colorcolumn=6,12,26,36,50,68,81
autocmd FileType rpgle highlight ColorColumn term=reverse ctermfg=white ctermbg=2
" #### ステータスライン
" 現在列数
set statusline=[COL=%c]\
" ファイル名
set statusline=%F
" 変更チェック表示
set statusline+=%m
" 読み込み専用かどうか表示
set statusline+=%r
" ヘルプページなら[HELP]と表示
set statusline+=%h
" プレビューウインドウなら[Prevew]と表示
set statusline+=%w
" これ以降は右寄せ表示
set statusline+=%=
" file encoding
set statusline+=[ENC=%{&fileencoding}]
" 現在行数/全行数
set statusline+=[LOW=%l/%L]
" ステータスラインを常に表示(0:表示しない、1:2つ以上ウィンドウがある時だけ表示)
set laststatus=2
" #### NeoBundle用設定
if has('vim_starting')
" 初回起動時のみruntimepathにneobundleのパスを指定する
set runtimepath+=/home/{ユーザ名}/.vim/bundle/neobundle.vim/
endif
" NeoBundleを初期化
call neobundle#begin(expand('/home/{ユーザ名}/.vim/bundle/'))
"""" インストールするプラグインをここに記述
" vimfiler {{{
NeoBundle 'Shougo/vimfiler'
"vimデフォルトのエクスプローラをvimfilerで置き換える
let g:vimfiler_as_default_explorer = 1
"セーフモードを無効にした状態で起動する
let g:vimfiler_safe_mode_by_default = 0
"現在開いているバッファをIDE風に開く
nnoremap <silent> [unite]i :<C-u>VimFilerBufferDir -split -simple -winwidth=35 -no-quit<CR>
"デフォルトのキーマッピングを変更
augroup vimrc
autocmd FileType vimfiler call s:vimfiler_my_settings()
augroup END
function! s:vimfiler_my_settings()
nmap <buffer> <ESC> <Plug>(vimfiler_exit)
nmap <buffer> q <Plug>(vimfiler_exit)
nmap <buffer> Q <Plug>(vimfiler_hide)
endfunction
"}}}
" vim-indent-guides {{{
NeoBundle "nathanaelkane/vim-indent-guides"
colorscheme default
set tabstop=4
set expandtab
set shiftwidth=4
let s:hooks = neobundle#get_hooks("vim-indent-guides")
let g:indent_guides_enable_on_vim_startup=1
function! s:hooks.on_source(bundle)
let g:indent_guides_guide_size = 1
endfunction
" }}}
call neobundle#end()
""""
" NeoBundleの後に必要な設定
filetype plugin indent on
syntax on
2)NeoBundleインストール
$ mkdir ~/.vim
$ mkdir ~/.vim/bundle
$ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
3) NeoBundleプラグイン(vimfiler他)をインストール
$ vim (NeoBundleを設定したユーザで起動する)
:NeoBundleInstall
4) vimのRPGのハイライト
https://github.com/paulpritchard68/VimRPG
上記をダウンロードし、zipを展開して~/.vimに置く
以下のようになるはず
.vim
└── syntax
├── clp.vim
└── rpgle.vim
■tmuxの設定
1) /home/{ユーザ}/.tmux.confを作成する
# キーバインドをC-eに変更する
set -g prefix C-e
unbind C-b
# bind C-e send-prefix
#set-option -g allow-rename off
## ステータスバー全体の設定
# 256色端末を使用する
set-option -g default-terminal screen-256color
# ステータスバーのUTF-8サポートを有効にする
set -g status-utf8 on
# リフレッシュの間隔(デフォルト 15秒)
set -g status-interval 60
## 左パネル
# 左パネル(ホスト名:[セッション名])
set -g status-left-length 40
set -g status-left '#[fg=black,bg=cyan,bold]#H#[fg=black]:#[fg=black][#S]#[default]'
## ウィンドウリスト
set-window-option -g automatic-rename off
set-window-option -g allow-rename off
# ウィンドウ名をstarttmux.bashで指定した名前から変えない
set-window-option -g automatic-rename off
set-window-option -g allow-rename off
# ウィンドウのインデックスを1から始める
set -g base-index 1
# ウィンドウリストの位置を中心寄せにする
set -g status-justify centre
# window-status のフォーマットを指定する。
set-window-option -g window-status-format "#[fg=colour255,bold] #I #[default]"
# ウィンドウリストの位置を左寄せにする
set -g status-justify left
# カレントウィンドウの window-status のフォーマットを指定する
set-window-option -g window-status-current-format "#[fg=colour255,bg=colour27,bold] #I #W #[default]"
## 右パネル
# 右パネル(日時)
set -g status-right '#[fg=black,bg=cyan,bold] [%Y-%m-%d(%a) %H:%M]#[default]'
2) tmuxの起動スクリプトstarttmux.bashを作成する
/home/{ユーザ}/starttmux.bashを作成する
src1,src2や$DIR,$DIR/srcは自分の環境に合わせて変更する
#!/bin/bash
#
# stop exist tmux
kill `ps axuw|grep 'tmux new'|awk '{print $2}'`
# start tmux
DIR="/home/{ユーザ}/"
tmux new-session -n 'bash ' -d -s as400dev "bash"
tmux new-window -n 'git ' -c "$DIR" "bash"
tmux new-window -n 'build ' -c "$DIR" "bash"
tmux new-window -n 'src1 ' -c "$DIR/src" "bash"
tmux new-window -n 'src2 ' -c "$DIR/src" "bash"
tmux new-window -n 'src3 ' -c "$DIR/src" "bash"
tmux new-window -n 'src4 ' -c "$DIR/src" "bash"
tmux attach -t as400dev
作成後以下で実行権限を付与する
$ chmod +x starttmux.bash