📑
neovim/tmux入門 設定の備忘録
はじめに
基本いろいろなところからのコピペです。
ある程度開発できるかなというところまで来たので忘れないように記録します。
neovim kickstart
このリポジトリが素晴らしい。
必須級プラグインがまとまって入っており、init.lua
を読み解いていくことで基礎を身につけられる。
パッケージマネージャはlazy.nvim
やったこと
-
~/.config/nvim/init.lua
を作成して丸々コピペ
nvimひらけばいろいろインストールされる。 - キーマップ追加
jj
でノーマルモードに戻りたい。
~/.config/nvim/init.lua
vim.keymap.set('i', 'jj', '<ESC>', { silent = true })
-
nvim-tree
追加
やっぱりIDEみたいにファイルツリー開きたい。
ここから持ってきた。
nvim-tree
とtelescope
で検索を便利にする。
~/.config/nvim/init.lua
require('lazy').setup({
~~元々入っているpluginたち~~
{
'nvim-tree/nvim-tree.lua',
config = function() require 'plugins.nvim-tree' end,
requires = {'nvim-tree/nvim-web-devicons', 'nvim-telescope/telescope.nvim'},
},
}, {})
~/.config/nvim/lua/plugins/nvim-tree.lua
-- netrwの無効化
vim.api.nvim_set_var('loaded_netrw', 1)
vim.api.nvim_set_var('loaded_netrwPlugin', 1)
require('nvim-tree').setup {
view = {
width = '20%',
signcolumn = 'no',
},
renderer = {
highlight_git = true,
highlight_opened_files = 'name',
icons = {
glyphs = {
git = {
unstaged = '!', renamed = '»', untracked = '?', deleted = '✘',
staged = '✓', unmerged = '', ignored = '◌',
},
},
},
},
actions = {
expand_all = {
max_folder_discovery = 100,
exclude = { '.git', 'target', 'build' },
},
},
on_attach = require('plugins.nvim-tree-actions').on_attach,
}
vim.api.nvim_create_user_command('Ex', function() vim.cmd.NvimTreeToggle() end, {})
~/.config/nvim/lua/plugins/nvim-tree-actions.lua
local menuCommand = {}
local function actionsMenu(nd)
local default_options = {
results_title = 'NvimTree',
finder = require('telescope.finders').new_table {
results = menuCommand,
entry_maker = function(menu_item)
return {
value = menu_item,
ordinal = menu_item.name,
display = menu_item.name,
}
end,
},
sorter = require('telescope.sorters').get_generic_fuzzy_sorter(),
attach_mappings = function(prompt_buffer_number)
local actions = require 'telescope.actions'
-- On item select
actions.select_default:replace(function()
-- Closing the picker
actions.close(prompt_buffer_number)
-- Executing the callback
require('telescope.actions.state').get_selected_entry().value.handler(nd)
end)
return true
end,
}
-- Opening the menu
require('telescope.pickers')
.new({ prompt_title = 'Command', layout_config = { width = 0.3, height = 0.5 } }, default_options)
:find()
end
local api = require 'nvim-tree.api'
local tree, fs, node = api.tree, api.fs, api.node
local command = {
{ '', tree.change_root_to_node, 'CD' },
{ '', node.open.replace_tree_buffer, 'Open: In Place' },
{ '', node.show_info_popup, 'Info' },
{ '', fs.rename_sub, 'Rename: Omit Filename' },
{ '', node.open.tab, 'Open: New Tab' },
{ '', node.open.vertical, 'Open: Vertical Split' },
{ '', node.open.horizontal, 'Open: Horizontal Split' },
{ '<BS>', node.navigate.parent_close, 'Close Directory' },
{ '<CR>', node.open.edit, 'Open' },
{ '<Tab>', node.open.preview, 'Open Preview' },
{ '>', node.navigate.sibling.next, 'Next Sibling' },
{ '<', node.navigate.sibling.prev, 'Previous Sibling' },
{ '.', node.run.cmd, 'Run Command' },
{ '-', tree.change_root_to_parent, 'Up' },
{ '', fs.create, 'Create' },
{ '', api.marks.bulk.move, 'Move Bookmarked' },
{ 'B', tree.toggle_no_buffer_filter, 'Toggle No Buffer' },
{ '', fs.copy.node, 'Copy' },
{ 'C', tree.toggle_git_clean_filter, 'Toggle Git Clean' },
{ '[c', node.navigate.git.prev, 'Prev Git' },
{ ']c', node.navigate.git.next, 'Next Git' },
{ '', fs.remove, 'Delete' },
{ '', fs.trash, 'Trash' },
{ 'E', tree.expand_all, 'Expand All' },
{ '', fs.rename_basename, 'Rename: Basename' },
{ ']e', node.navigate.diagnostics.next, 'Next Diagnostic' },
{ '[e', node.navigate.diagnostics.prev, 'Prev Diagnostic' },
{ 'F', api.live_filter.clear, 'Clean Filter' },
{ 'f', api.live_filter.start, 'Filter' },
{ 'g?', tree.toggle_help, 'Help' },
{ 'gy', fs.copy.absolute_path, 'Copy Absolute Path' },
{ 'H', tree.toggle_hidden_filter, 'Toggle Dotfiles' },
{ 'I', tree.toggle_gitignore_filter, 'Toggle Git Ignore' },
{ 'J', node.navigate.sibling.last, 'Last Sibling' },
{ 'K', node.navigate.sibling.first, 'First Sibling' },
{ 'm', api.marks.toggle, 'Toggle Bookmark' },
{ 'o', node.open.edit, 'Open' },
{ 'O', node.open.no_window_picker, 'Open: No Window Picker' },
{ '', fs.paste, 'Paste' },
{ 'P', node.navigate.parent, 'Parent Directory' },
{ 'q', tree.close, 'Close' },
{ 'r', fs.rename, 'Rename' },
{ 'R', tree.reload, 'Refresh' },
{ 's', node.run.system, 'Run System' },
{ 'S', tree.search_node, 'Search' },
{ 'U', tree.toggle_custom_filter, 'Toggle Hidden' },
{ 'W', tree.collapse_all, 'Collapse' },
{ '', fs.cut, 'Cut' },
{ 'y', fs.copy.filename, 'Copy Name' },
{ 'Y', fs.copy.relative_path, 'Copy Relative Path' },
--{ '<2-LeftMouse>', node.open.edit, 'Open' },
{ '<Space>', actionsMenu, 'Command' },
}
local function createTreeActions()
for _, cmd in pairs(command) do
table.insert(menuCommand, { name = cmd[3], handler = cmd[2] })
end
end
createTreeActions()
local M = {}
function M.on_attach(bufnr)
local opts = function(desc)
return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, nowait = true }
end
for _, cmd in pairs(command) do
if (string.len(cmd[1]) > 0) then
vim.keymap.set('n', cmd[1], cmd[2], opts(cmd[3]))
end
end
end
return M
tmux
ターミナル画面を分割するやつ。
やったこと
~/.tmux.conf
に書く。
~/.tmux.conf
# ---------------------------------------------------------
# basic
# ---------------------------------------------------------
# tmux起動時のシェルをzshに
set-option -g default-shell /bin/zsh
# 256色表示可能に変更
set-option -g default-terminal screen-256color
set -g terminal-overrides 'xterm:colors=256'
# PrefixをCtrl-qに変更
set -g prefix C-q
unbind C-b
# ---------------------------------------------------------
# status line
# ---------------------------------------------------------
# 更新する間隔を 1 秒
set-option -g status-interval 1
# window-status を中央揃えで配置
set-option -g status-justify "centre"
# status line の背景色を指定
set-option -g status-bg "colour238"
# status line の文字色を指定
set-option -g status-fg "colour255"
# statusの最大の長さを指定
set-option -g status-left-length 20
set-option -g status-right-length 60
# status-left のフォーマットを指定
set-option -g status-left "#[fg=colour255,bg=colour241]Session: #S #[default]"
# status-right のフォーマットを指定
set-option -g status-right "#[fg=colour255,bg=colour241] #h | LA: #(cut -d' ' -f-3 /proc/loadavg) | %m/%d %H:%M:%S#[default]"
# window-status のフォーマットを指定
set-window-option -g window-status-format " #I: #W "
# カレントウィンドウの window-status のフォーマットを指定
set-window-option -g window-status-current-format "#[fg=colour255,bg=colour27,bold] #I: #W #[default]"
set-option -g base-index 1
set-option -g pane-base-index 1
# ---------------------------------------------------------
# mapping
# ---------------------------------------------------------
# vimのキーバインドでペインを移動
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# vimのキーバインドでペインをリサイズ
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
# .tmux.confの読み込み
bind-key r source-file ~/.tmux.conf\; display-message "$HOME/.tmux.conf reloaded!"
# | でペインを縦分割する
bind | split-window -h
# - でペインを縦分割する
bind - split-window -v
# ---------------------------------------------------------
# copy mode
# ---------------------------------------------------------
setw -g mode-keys vi
# 'v' で選択開始
bind -T copy-mode-vi v send -X begin-selection
# 'V' で行選択
bind -T copy-mode-vi V send -X select-line
# 'C-v' で矩形選択
bind -T copy-mode-vi C-v send -X rectangle-toggle
# 'y' でヤンク
bind -T copy-mode-vi y send -X copy-selection
# 'Y' で行ヤンク
bind -T copy-mode-vi Y send -X copy-line
# 'C-p'でペースト
bind-key C-p paste-buffer
ここからのコピペ。
tmuxはtpm
というパッケージマネージャを使うのが主流っぽい。
見た目
おわり
まずは今入っているpluginを徐々に使えるように頑張ります!
本当にkickstart.nvim
があって良かった。
Discussion