📑

neovim/tmux入門 設定の備忘録

2023/05/06に公開

はじめに

基本いろいろなところからのコピペです。
ある程度開発できるかなというところまで来たので忘れないように記録します。

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-treetelescopeで検索を便利にする。

~/.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があって良かった。

GitHubで編集を提案

Discussion