vim の hjkl
って左から順に ←↓↑→
ですね。DanceDanceRevolution1 と同じですね!
使い始めの頃から特に迷わなかった理由が判明しました。
小話はさておき、neovim に移行してしばらく経ったので init.vim を晒しておく。
init.vim
全体は後ろの方に記載。
nvim の init.vim
は普通にインストールしていれば ~/.config/nvim/init.vim
にあるはず。
使用イメージ
以下の操作を行った時の録画。
- ファイルを開いて、関連ファイルを隣に開く
- README.md のコマンドを実行する
タブ・ウインドウ分割とターミナルモードの使用感がこんな感じになる。
詳細な動きとしては
- nvim を開く
- ファイルツリーからファイルを開く
- 画面分割
- 右側に関連ファイルを開く
- 適当に文字列を検索
- 右側でも検索
- タブを増やす
- README を開く
- ターミナルを出してディレクトリ移動
- README を開く
- コマンドをコピペして実行
をやっている。
お気に入りポイント
タブとウィンドウ分割を多用するので、<space> + h/j/k/l
でウィンドウ移動、
<space> + y/u/i/o
でタブ操作ができるようにしている。
以前は <space> + h/j/k/l
でウィンドウ移動だけ設定していたが、
「指を一個上にしたらタブ移動になると嬉しいな」でタブ操作のリマップを増やした。とても快適。
ウィンドウ分割は :vs
と :sp
で、もともと短いのでそのまま使用。
その他便利設定
よくある設定
-
<leader>
キーを設定する-
<space>
に設定している
-
- ターミナルモードから
<esc>
でノーマルモードに戻れるようにする- デフォルトのコマンドはなんであんなに複雑なんだろうか
- コメントアウトのリマップ (プラグインの機能)
- 他のエディタだと
ctrl + /
が多いので、それに近い<leader> + /
に設定。 - ただし、一行でもビジュアルモードで選択が必要。
- 他のエディタだと
その他には、<space> + v
でタブ文字を探しやすくしたり、
全角スペースを色付けしたり、業務上ちょっと必要だったバイナリ編集用のコマンドとかを
入れたりしている。
最近知ったが、環境変数が使える。
お気に入りポイント抜粋
" ウィンドウ移動
nnoremap <leader>h <c-w>h
nnoremap <leader>j <c-w>j
nnoremap <leader>k <c-w>k
nnoremap <leader>l <c-w>l
" タブ移動
nnoremap <leader>y gT
nnoremap <leader>o gt
nnoremap <leader>i :tabnew<enter>
nnoremap <leader>u :-tabnew<enter>
" プラグイン関係
nnoremap <leader>n :NvimTreeToggle<enter>
map <leader>/ gc
" 保存
nnoremap <leader>s :w<enter>
" ターミナルモード設定
command! -nargs=* Term split | terminal <args>
nnoremap <leader>t :Term<enter>
tnoremap <Esc> <c-\><c-n>
lua ファイルでの設定について
vim の設定ファイルが .vimrc
で、nvim では init.vim
になるが、nvim では
lua 言語がサポートされていて init.lua
で設定することもできる。
.vim から .lua を読み込むことも、 .lua で vim コマンドを使うこともできるので、無理やり変換する必要はない。
筆者は init.vim を .vimrc からほぼそのまま移行して、一部のプラグインだけ lua ファイルで設定している。
init.vim から .vimrc を呼び出して vim と neovim の設定を共通化することもできるが、vim は素のままにしておくことにした。
init.vim 全体
syntax on
filetype plugin indent on
set autoindent
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4
set backspace=2
set belloff=all
set listchars=eol:$,tab:>.,trail:_
set mouse=
" set number
" set list
" set bin noeol
" set ambiwidth=double
" let g:loaded_netrw = 1
" let g:loaded_netrwPlugin = 1
scriptencoding utf-8
" packer settings
luafile ~/.config/nvim/plugins/packer.lua
" load plugin settings
luafile ~/.config/nvim/plugins/settings/nvim-tree.lua
let mapleader="\<space>"
nnoremap U <c-r>
nnoremap H ^
nnoremap J 10j
nnoremap K 10k
nnoremap L $
vnoremap H ^
vnoremap J 10j
vnoremap K 10k
vnoremap L $
nnoremap <leader>h <c-w>h
nnoremap <leader>j <c-w>j
nnoremap <leader>k <c-w>k
nnoremap <leader>l <c-w>l
nnoremap <leader>y gT
nnoremap <leader>o gt
nnoremap <leader>i :tabnew<enter>
nnoremap <leader>u :-tabnew<enter>
nnoremap <leader>J :vs<enter>
nnoremap <leader>L :sp<enter>
nnoremap <leader>wh <c-w><
nnoremap <leader>wj <c-w>-
nnoremap <leader>wk <c-w>+
nnoremap <leader>wl <c-w>>
nnoremap <leader>ww <c-w>=
nnoremap <leader>s :w<enter>
nnoremap <c-s> :w<enter>
nnoremap <leader>n :NvimTreeToggle<enter>
map <leader>/ gc
nnoremap <leader>v :set fileformat=unix<enter>:set list!<enter>
nnoremap <leader>x :%!xxd
" nnoremap <leader>X :%!xxd -r
nnoremap <leader>z zi
" terminal settings
command! -nargs=* Term split | terminal <args>
nnoremap <leader>t :Term<enter>
tnoremap <Esc> <c-\><c-n>
" TIPS: command to replace with check: :%s/<object>/<target>/gc
" for tqdm in python. (vim version >= 8.2)
call setcellwidths([[0x2588, 0x258f, 1]])
" plugins
" ale
let g:ale_sign_column_always = 0
let g:ale_lint_on_text_changed = 'never'
let g:ale_lint_on_insert_leave = 0
let g:ale_lint_on_enter = 0
" github copilot
" let g:copilot_node_command = '/home/ubuntu/.asdf/shims/node'
let g:copilot_proxy = $HTTP_PROXY
let g:copilot_filetypes = {
\ '*': v:true,
\ }
" settings for vscode-neovim
if exists('g:vscode')
let g:copilot_filetypes = {
\ '*': v:false,
\ }
else
" orginary neovim
endif
" each setting for filetype could be moved to another file.
augroup fileTypeIndent
autocmd!
autocmd BufNewFile,BufRead *.yaml setlocal tabstop=2 softtabstop=2 shiftwidth=2 foldmethod=indent
autocmd BufNewFile,BufRead *.yml setlocal tabstop=2 softtabstop=2 shiftwidth=2 foldmethod=indent
autocmd BufNewFile,BufRead *.sh setlocal tabstop=2 softtabstop=2 shiftwidth=2 foldmethod=indent
autocmd BufNewFile,BufRead *.ts setlocal tabstop=2 softtabstop=2 shiftwidth=2
autocmd BufNewFile,BufRead *.tf set filetype=terraform
autocmd BufNewFile,BufRead *.sql setlocal filetype=sql commentstring=--\ %s
augroup END
" colorize ideographic space
augroup highlightIdegraphicSpace
autocmd!
autocmd Colorscheme * highlight IdeographicSpace term=underline ctermbg=DarkGreen guibg=DarkGreen
autocmd VimEnter,WinEnter * match IdeographicSpace / /
augroup END
colorscheme desert
packer.lua
ついでにプラグインマネージャー packer
の設定も。こちらはあまりカスタマイズしていない。
local ensure_packer = function()
local fn = vim.fn
local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'
if fn.empty(fn.glob(install_path)) > 0 then
fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
vim.cmd [[packadd packer.nvim]]
return true
end
return false
end
local packer_bootstrap = ensure_packer()
return require('packer').startup(function(use)
use 'wbthomason/packer.nvim'
use 'tpope/vim-commentary'
use 'tpope/vim-fugitive'
use 'dense-analysis/ale'
use 'github/copilot.vim'
use 'hashivim/vim-terraform'
use {
'nvim-tree/nvim-tree.lua',
requires = 'nvim-tree/nvim-web-devicons',
wants = 'nvim-web-devicons',
config = function()
require('nvim-web-devicons').setup {}
require('nvim-tree').setup({
})
end
}
-- Automatically set up your configuration after cloning packer.nvim
-- Put this at the end after all plugins
if packer_bootstrap then
require('packer').sync()
end
end)
-
通称DDR またはダンレボ。1999年に一世を風靡した、リズムに合わせてパネルを踏むアーケードゲーム。 ↩