📚
tmuxとかnvimとかVSCodeとかの設定の整理(wsl2)
久しぶりに tmux, nvim, VSCode の設定やショートカットキーなどを整理したり、思い出したりしたいと思います。
Windows11 で WSL2 の ArchLinux を使っています。
tmux
設定内容
キーバインドのメモ
-
Ctrl+s H(J, K, L)
で pane リサイズ -
Shift+left(up, down, right)
で pane リサイズ -
Ctrl+s left(up, down, right)
で pane 入替 -
Ctrl+h(j, k, l)
でアクティブな pane を移動
コピー&ペースト
-
Ctrl+y
でコピーモードに入る - vim と同様の操作でコピー対象を選択して、
y
でコピー。
nvim
設定内容
とりあえず、基本っぽいやつまで忘れましたので、思い出します。色々プラグイン設定してもどんどん忘れていくので、なるべく標準的機能でできるようにしようと思いました。。
キーバインドのメモ
vim-easymotion
-
<Space>s (探したい文字)
で検索できる
vim-surround
-
ds(
で囲っている()
を削除できる -
cs([
で囲っている()
を[]
に変更できる -
ysw(
で単語を()
で囲える-
w
は motion -
yswt + h2
で<h2>
タグで囲える-
t
は html タグ
-
-
- Visual mode のときに
S(
で()
で囲える
参考: vim-surround
参考: vim-surround で vimmer への道を極めよう
複数行の一括編集
-
Ctrl+v
で 1 文字を Visual mode で選択して、そのままj
を押せば下の行の同じ場所の文字も選択できる -
I
で挿入モードになる。 - 各行の行末に挿入するというのも簡単にできる。
Ctrl+v
>3j
>$
>A
で各行末への挿入モードになる。
選択範囲をヤンクした文字列と置換
- Visual mode で置換したい文字列を選択して、
p
を押すと、ヤンクした文字列と置換される。
VSCode
下記設定内容で自分的にはかなり便利になりました。vim のキーバインドで VSCode のどんなコマンドでも実行できるので、工夫次第でさらに便利にできるかもなあと思いました。
設定内容
setting.json
//VIM
"vim.vimrc.enable": true,
"vim.enableNeovim": true,
"vim.autoSwitchInputMethod.enable": true,
"vim.camelCaseMotion.enable": true,
"vim.changeWordIncludesWhitespace": true,
"vim.commandLineModeKeyBindings": [],
"vim.easymotion": true,
"vim.highlightedyank.enable": true,
"vim.hlsearch": true,
"vim.normalModeKeyBindings": [
{
"before": ["s", "s"],
"commands": [":split"]
},
{
"before": ["s", "v"],
"commands": [":vsplit"]
},
{
"before": ["s", "q"],
"commands": [":q"]
},
{
"before": ["f"],
"after": ["<Leader>", "<Leader>", "s"]
},
{
"before": ["<Leader>", "a"],
"commands": [{ "command": "bookmarks.listFromAllFiles" }]
},
{
"before": ["<Leader>", "b"],
"commands": [{ "command": "bookmarks.toggle" }]
},
{
"before": ["<Leader>", "d"],
"commands": [{ "command": "editor.action.revealDefinition" }]
},
{
"before": ["<Leader>", "e"],
"commands": [{ "command": "workbench.view.explorer" }]
},
{
"before": ["<Leader>", "f"],
"commands": [{ "command": "editor.action.formatDocument" }]
},
{
"before": ["<Leader>", "g"],
"commands": [{ "command": "workbench.view.scm" }]
},
{
"before": ["<Leader>", "h"],
"commands": [{ "command": "editor.action.marker.nextInFiles" }]
},
{
"before": ["<Leader>", "<Leader>", "g"],
"commands": [{ "command": "git-graph.view" }]
},
{
"before": ["<Leader>", "r"],
"commands": [{ "command": "workbench.view.search" }]
},
{
"before": ["<Leader>", "s"],
"commands": [{ "command": "workbench.action.toggleSidebarVisibility" }]
},
{
"before": ["<Leader>", ";"],
"commands": [{ "command": "workbench.action.showCommands" }]
},
],
"vim.visualModeKeyBindings": [
{
"before": ["<Leader>", "t"],
"commands": [{ "command": "translates.translates" }]
},
],
"vim.replaceWithRegister": true,
"vim.scroll": 5,
"vim.foldfix": true,
"vim.gdefault": true,
"vim.neovimUseConfigFile": true,
"vim.showMarksInGutter": true,
"vim.targets.enable": true,
"vim.visualstar": true,
"vim.history": 100,
"vim.statusBarColorControl": true,
"vim.useSystemClipboard": true,
"vim.vimrc.path": "$HOME/.vimrc",
"vim.leader": "<Space>",
"vim.statusBarColors.commandlineinprogress": "#090",
"vim.statusBarColors.insert": "#09c",
"vim.statusBarColors.normal": "#609",
"vim.statusBarColors.replace": "#f90",
"vim.statusBarColors.searchinprogressmode": "#070",
"vim.statusBarColors.surroundinputmode": "#990",
"vim.statusBarColors.visual": "#940",
"vim.statusBarColors.visualblock": "#930",
"vim.statusBarColors.visualline": "#950",
$HOME/.vimrc
""""""""""""""""""""""""""""""
" Keymap設定
""""""""""""""""""""""""""""""
nnoremap ; :
nnoremap : ;
nnoremap j gj
nnoremap k gk
nnoremap gj j
nnoremap gk k
nnoremap <Space>h ^
nnoremap <Space>l $
cnoremap <Space>j $<CR>
nnoremap <Space>w :w<CR>
nnoremap <Space>q :q<CR>
nnoremap <Esc><Esc> :nohlsearch<CR>
inoremap jj <Esc>
nnoremap ZZ <Nop>
nnoremap ZQ <Nop>
nnoremap Q <Nop>
""""""""""""""""""""""""""""""
" 画面分割・タブページの設定
""""""""""""""""""""""""""""""
noremap s <Nop>
nnoremap sj <C-w>j
nnoremap sk <C-w>k
nnoremap sl <C-w>l
nnoremap sh <C-w>h
nnoremap sJ <C-w>J
nnoremap sK <C-w>K
nnoremap sL <C-w>L
nnoremap sH <C-w>H
nnoremap sn gt
nnoremap sp gT
nnoremap sr <C-w>r
nnoremap s= <C-w>=
nnoremap sw <C-w>w
nnoremap so <C-w>_<C-w>|
nnoremap sO <C-w>=
nnoremap sN :<C-u>bn<CR>
nnoremap sP :<C-u>bp<CR>
nnoremap st :<C-u>tabnew<CR>
nnoremap sT :<C-u>Unite tab<CR>
nnoremap ss :<C-u>sp<CR>
nnoremap sv :<C-u>vs<CR>
nnoremap sq :<C-u>q<CR>
nnoremap sQ :<C-u>bd<CR>
nnoremap sb :<C-u>Unite buffer_tab -buffer-name=file<CR>
nnoremap sB :<C-u>Unite buffer -buffer-name=file<CR>
キーバインドのメモ
ターミナルの表示・非表示・拡大表示
-
Ctrl+i
でターミナルが拡大表示される。 -
Ctrl+t
でターミナルの表示・非表示がトグルされる。
ターミナルの分割・移動
tmux を使います。
-
Ctrl+s s
,Ctrl+s v
で分割します。 -
Ctrl+j
,Ctrl+h
,Ctrl+l
を使って移動します。上下はCtrl+j
を使います。
vim-easymotion
-
f (探したい文字)
で検索できる
引数を 1 つ削除
-
daa
で delete a argument ということで、引数を 1 つ削除できる。
コピー&ペースト
これ true にしたら、VSCode の Vim 操作でヤンクしたらクリップボードで使えた。うれしい。
"vim.useSystemClipboard": true
画面分割
ss
で水平分割, sv
で垂直分割
別画面で開く
ディレクトリツリー(Explorer)から別画面で開くには、Ctrl+Enter
ディレクトリツリーでディレクトリ・ファイルの作成・削除
下記を追加した。a
でファイル追加。f
でディレクトリ追加。r
でリネーム。d
で削除。
keybindings.json
{
"key": "a",
"command": "explorer.newFile",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
},
{
"key": "f",
"command": "explorer.newFolder",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
},
{
"key": "r",
"command": "renameFile",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
},
{
"key": "d",
"command": "deleteFile",
"when": "explorerViewletFocus && explorerViewletVisible && !inputFocus"
}
サイドバーの表示・非表示トグル
-
Ctrl+s
でサイドバーの表示・非表示のトグル -
<Space>e
でディレクトリツリー(Explorer)の表示 -
<Space>g
で Source Control(git 操作)の表示 -
<Space>r
で検索・置換の表示
エディタのタブの移動
-
sn
で右のタブに移動,sp
で左のタブに移動 -
Ctrl+Tab
だとタブの一覧が表示されて選べる
ノーマルモードに戻るときに IME をオフにする
- zenhanというのを使うとよいらしい。
- ただ、wsl2 の場合、下記が setting.json に書いても動かなかった。
setting.json
"vim.autoSwitchInputMethod.defaultIM": "0",
"vim.autoSwitchInputMethod.obtainIMCmd": "C:\\users\\foo\\bin\\zenhan.exe",
"vim.autoSwitchInputMethod.switchIMCmd": "C:\\users\\foo\\bin\\zenhan.exe 0",
そこで、vimmer-ahkというのを使って自動で OFF になるようにしました。
フォーマット
<Space>f
エラー・警告の表示
-
gh
でポップアップ表示 -
<Space>h
で詳しく表示
お気に入り
- vscode-bookmarksを入れています。
-
<Space>b
で Bookmark を toggle。 -
<Space>a
で全ファイルの Bookmarks 一覧を表示。
翻訳
- Google Translateというのを入れています。
-
Ctrl+Shift+t
で選択中の文字列を翻訳して、左下とステータスバーに表示します。 -
<Space>t
でも翻訳できます。 - ※コメントの場合や複数行の場合うまく動かないかも。
コマンドパレット
<Space>;
Ctrl+Shift+p
補完の競合の解消
とりあえず Tabnine を無効化してみよう
画面サイズ調整
これはどうもマウスでやる必要がありそう。。
Discussion