🦑

君もイカしたTerminal環境で開発してみなイカ?(wezterm, zsh, starship, neovim)

2023/12/05に公開
4

Introduction

私が今回構築したwezterm,zsh,starship,neovim環境を紹介します。
Wezterm,Zsh,Starship,NeoVim
設定したconfigは以下のリポジトリにあります。

今回構築するきっかけは以下の動画を見て、Vim使いこなしてるのかっこいいな〜、Terminal上で全て完結したら便利だよな〜、という単純な動機から始まりました。

LazyVimでいきなりどーん!っと構築しても何が何だかわからないので、coralpinkさんのサイトを参考に構築させていただきました。
構築時の環境は以下となっています。

OS : macOS Sonoma 14.1.1
zsh : 5.9 (arm-apple-darwin23.0.0)
wezterm : 20230712-072601-f4abf8fd
starship : 1.16.0
neovim : v0.9.4

Install

まずはTerminalがないと何も始まらないので、weztermをインストールし起動しましょう。

起動すると以下のような素のTerminalが起動するでしょう。
wezterm

Base Config Directory

各種設定ファイルの置き場所ですが、 XDG Base Directoryの仕様を参考に~/.configに置くようにしました。

~/.config/
├── README.md
├── nvim
├── starship.toml
├── wezterm
└── zsh

zsh

ZDOTDIR

macOSを使っている方であれば、デフォルトのshellがzshになっていると思います。
Base Config Directoryに記載した通り~/.configを設定ファイルの置き場所とするために、XDG_CONFIG_HOME=${HOME}/.configを環境変数としてexportしておきたいのですが、~/.config/zsh/.zshenvがまだ読み込まれる状態ではありません。
Zshのドキュメントを参照すると以下の順番で設定ファイルを読み込むようです。

/etc/zshenv
Always run for every zsh.
~/.zshenv
Usually run for every zsh (see below).
/etc/zprofile
Run for login shells.
~/.zprofile
Run for login shells.
/etc/zshrc
Run for interactive shells.
~/.zshrc
Run for interactive shells.
/etc/zlogin
Run for login shells.
~/.zlogin
Run for login shells.

~/.config/zsh/.zshenvを読むようにするには、/etc/zshenvにてZDOTDIRを対象のフォルダに指定する必要がありそうです

% sudo vim /etc/zshenv
ZDOTDIR=$HOME/.config/zsh
% mkdir -p ~/.config/zsh
% cd .config
% ls
zsh
% exec $SHELL

これで~/.config/zshにある設定ファイルを読むようになりました。

.zshenv

.zshenvにはenvとファイル名にあるので環境変数を設定していきます。
以下は私が設定しているものです。

# XDG
export XDG_CONFIG_HOME=${HOME}/.config
export XDG_CACHE_HOME=${HOME}/.cache
export XDG_DATA_HOME=${HOME}/.local/share
export XDG_STATE_HOME=${HOME}/.local/state

# path
export PATH=${HOME}/.local/bin:$PATH
export PATH="/usr/local/sbin:$PATH"

# lang
export LANGUAGE="en_US.UTF-8"
export LANG="${LANGUAGE}"
export LC_ALL="${LANGUAGE}"
export LC_CTYPE="${LANGUAGE}"

# editor
export EDITOR=vim
export CVSEDITOR="${EDITOR}"
export SVN_EDITOR="${EDITOR}"
export GIT_EDITOR="${EDITOR}"

# history
# 履歴ファイルの保存先
export HISTFILE=${HOME}/.config/zsh/.zsh_history
# メモリに保存される履歴の件数
export HISTSIZE=1000
# 履歴ファイルに保存される履歴の件数
export SAVEHIST=100000
export HISTFILESIZE=100000
# 重複を記録しない
setopt hist_ignore_dups
# 開始と終了を記録
setopt EXTENDED_HISTORY
# ヒストリに追加されるコマンド行が古いものと同じなら古いものを削除
setopt hist_ignore_all_dups
# スペースで始まるコマンド行はヒストリリストから削除
setopt hist_ignore_space
# ヒストリを呼び出してから実行する間に一旦編集可能
setopt hist_verify
# 余分な空白は詰めて記録
setopt hist_reduce_blanks
# 古いコマンドと同じものは無視
setopt hist_save_no_dups
# historyコマンドは履歴に登録しない
setopt hist_no_store
# 保管時にヒストリを自動的に展開
setopt hist_expand
# history共有
setopt share_history

# other
# zshの補完候補が画面から溢れ出る時、それでも表示するか確認
export LISTMAX=50
# バックグラウンドジョブの優先度(ionice)をbashと同じ挙動に
unsetopt bg_nice
# 補完候補を詰めて表示
setopt list_packed
# ピープオンを鳴らさない
setopt no_beep
# ファイル種別起動を補完候補の末尾に表示しない
unsetopt list_types

homebrew

必要なライブラリやコマンドをインストールするためにhomebrewをインストールしておきましょう。

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
% echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ${HOME}/.config/zsh/.zshrc
% cat $HOME/.config/zsh/.zshrc
eval "$(/opt/homebrew/bin/brew shellenv)"
% exec $SHELL
% brew help
help view
% brew update && brew upgrade
update, upgrade view log
% brew doctor
Your system is ready to brew.

このあとの構築に必要なライブラリをインストールしておきましょう。

% brew install git fzf ghq startship neovim lazygit
install view log
# fzfのショートカットコマンドインストール
% $(brew --prefix)/opt/fzf/install

ついでに設定ファイルをgit管理しましょう。

% cd ~/.config
% git init
# 適宜必要なファイルだけを追加 .gitignoreを追加しても良い
% git add *
% git commit

antigen

zshの使い勝手をよくするためにプラグインをインストールしていきたいので、プラグインマネージャのantigenを導入します。

インストールのコマンドを実行する前に環境変数を.zshenvに追加し、インストールします。

% echo 'export _ANTIGEN_INSTALL_DIR=${HOME}/.local/bin' >> ~/.config/zsh/.zshenv
% exec $SHELL
% curl -L git.io/antigen > ~/.local/bin/antigen.zsh

.zshrc

プラグインのインストールや各種設定を行っていきます。

# setting
# 新規ファイル作成時のパーミッション
umask 022
# コアダンプを残さない
limit coredumpsize 0
# キーバインドをemacに
bindkey -d
bindkey -e

# homebrew
eval "$(/opt/homebrew/bin/brew shellenv)"

# antigen
source $HOME/.local/bin/antigen.zsh

# Load the oh-my-zsh's library
antigen use oh-my-zsh

antigen bundles <<EOBUNDLES
    # Bundles from the default repo (robbyrussell's oh-my-zsh)
    git
    # Syntax highlighting bundle.
    zsh-users/zsh-syntax-highlighting
    # Fish-like auto suggestions
    zsh-users/zsh-autosuggestions
    # Extra zsh completions
    zsh-users/zsh-completions
    # z
    rupa/z z.sh
    # abbr
    olets/zsh-abbr@main
EOBUNDLES

# Load the theme
antigen theme robbyrussell

# Tell antigen that you're done
antigen apply

antigenの設定はWikiから持ってきています。

zshのプラグインは以下を入れています。

  • fish like にコマンドをハイライト
  • fish like にオートサジェスト
  • 補完機能を提供
  • 一度アクセスしたディレクトリにディレクトリ名だけで移動
  • 省略したコマンド定義を展開して実行

プラグインを導入したので、.zshrcを更新します。

# alias
alias ls='ls -F --color=auto'
alias vim='nvim'
abbr -S ll='ls -l' >>/dev/null
abbr -S la='ls -A' >>/dev/null
abbr -S lla='ls -l -A' >>/dev/null
abbr -S v='vim' >>/dev/null
abbr -S g='git' >>/dev/null
abbr -S gst='git status' >>/dev/null
abbr -S gsw='git switch' >>/dev/null
abbr -S gbr='git branch' >>/dev/null
abbr -S gfe='git fetch' >>/dev/null
abbr -S gpl='git pull' >>/dev/null
abbr -S gad='git add' >>/dev/null
abbr -S gcm='git commit' >>/dev/null
abbr -S gmg='git merge' >>/dev/null
abbr -S gpsh='git push' >>/dev/null
abbr -S lg='lazygit' >>/dev/null

aliasとabbrは、自分で使いやすいものに変更してください。

exec $SHELLすると少しだけカラフルなTerminalになったと思います。
zsh update

wezterm

weztermはwezさんが個人で開発しているRustで実装されたGPUアクセラレーションのマルチプラットフォームターミナルエミュレータです。(英語を直訳)

今回なぜweztermを選んだのかというと、lua言語で設定を記載できること、マルチプラットフォームであることが挙げられます。

  1. lua言語で設定を記載できる
    後述するneovimでもlua言語を利用して設定を記載するので、同じ言語でメンテナンスできることは頭の切り替えが少なくて良いと思います。
    また、iTerm2(私が今まで使っていたTerminal)と違って設定を外部ファイルで管理できることによってバージョン管理ができます。
  2. マルチプラットフォームである
    私がこれまで使っていたiTerm2はmacユーザーしか利用できませんでした。
    チーム開発をしていると設定を共有して同じ環境での開発をしたくなると思いますが、weztermであればそれが実現できると思います。

color font

設定を書いていきましょう。

% mkdir ~/.config/wezterm
% touch wezterm.lua

Quick Startをそのまま~/.config/wezterm/wezterm.luaにコピペしましょう。

-- Pull in the wezterm API
local wezterm = require 'wezterm'

-- This table will hold the configuration.
local config = {}

-- In newer versions of wezterm, use the config_builder which will
-- help provide clearer error messages
if wezterm.config_builder then
  config = wezterm.config_builder()
end

-- This is where you actually apply your config choices

-- For example, changing the color scheme:
config.color_scheme = 'AdventureTime'

-- and finally, return the configuration to wezterm
return config

wezterm.luaを保存して、Command + Rで設定ファイルを再読み込みすると以下のようになると思います。
update wezterm
今度はColorScheme, Opacity, Fontを変更してみましょう。
wezterm.luaに以下を追加します。

-- colors
config.color_scheme = "nord"
config.window_background_opacity = 0.93
-- font
config.font = wezterm.font("Firge35Nerd Console")
config.font_size = 13.0

update wezterm
ColorSchemeで指定したNordですが、柔らかい色合いで好きです。

Fontで指定したFirge35Nerd Consoleですが、自分で好きなものを選ぶといいと思います。

keybind

以下のコマンドでweztermのkeybindをlua形式で出力することができます。

wezterm show-keys --lua > ~/.config/wezterm/keybinds.lua

keybinds.luaで設定した内容をkeybindとして使いたいので、wezterm.luaを以下のように編集します。

-- keybinds
-- デフォルトのkeybindを無効化
config.disable_default_key_bindings = true
-- `keybinds.lua`を読み込み
local keybind = require 'keybinds'
-- keybindの設定
config.keys = keybind.keys
config.key_tables = keybind.key_tables
-- Leaderキーの設定
config.leader = { key = ",", mods = "CTRL", timeout_milliseconds = 2000 }

Leaderキーは自分の好みに合わせて設定してください。
Leaderキーをkeybind.luaの方にも反映させます。
画面分割をLEADER + ",LEADER + %にしています。
https://github.com/disk-inue/dotfiles/blob/work-article/wezterm/keybinds.lua#L11
https://github.com/disk-inue/dotfiles/blob/work-article/wezterm/keybinds.lua#L19
分割した画面の移動をLEADER + hjklにしています。
https://github.com/disk-inue/dotfiles/blob/work-article/wezterm/keybinds.lua#L138-L145

other

他にもWindowTitleやTab,StatusBarのカスタマイズができるので、公式ドキュメントやリポジトリを参考にしてみてください。

starship

weztermをカスタマイズしていい感じにしたので、starshipをカスタマイズしてShellPromptをいい感じにしましょう。
starshipは、Rustで実装されたマルチプラットフォームでカスタマイズ可能なプロンプトです。

カスタマイズしていく前に.zshrcに以下を追記します。

eval "$(starship init zsh)"

exec $SHELLをすると以下のようになると思います。
start starship
見える情報量が増えましたね。

設定を参考にstartship.tomlを編集していきます。

% touch ~/.config/starship.toml
# promptのカラーを設定しています、$変数は後述で設定している変数が差し込まれます
format = """
$directory\
[](fg:#88C0D0 bg:#394260)\
$git_branch\
$git_status\
[](fg:#394260)\
$fill\
[](fg:#212736)\
$nodejs\
$rust\
$golang\
$php\
[](fg:#1d2230 bg:#212736)\
$time\
[](fg:#88C0D0 bg:#1d2230)\
$os\
[](fg:#88C0D0)\
\n$character"""

# コマンドラインに1行分のスペースを入れない
add_newline = false

# left_promptとright_promptの間を何で埋めるか設定
[fill]
symbol = ' '

[os]
format = "[$symbol]($style)"
style = "fg:#2E3440 bg:#88C0D0 bold"
disabled = false

[os.symbols]
Macos = "  " # nf-fa-apple
Ubuntu = "  " # nf-linux-ubuntu
Debian = "  " # nf-linux-debian

[directory]
style = "fg:#2E3440 bg:#88C0D0 bold"
format = "[ $path ]($style)"
truncation_length = 10
truncate_to_repo = false
truncation_symbol = "…/"

[directory.substitutions]
"Documents" = "󰈙 "
"Downloads" = " "
"Music" = " "
"Pictures" = " "

[aws]
disabled = true
[gcloud]
disabled = true

[git_branch]
symbol = ""
style = "bg:#394260"
format = '[[ $symbol $branch ](fg:#769ff0 bg:#394260)]($style)'

[git_status]
style = "bg:#394260"
format = '[[($all_status$ahead_behind )](fg:#769ff0 bg:#394260)]($style)'

[nodejs]
symbol = ""
style = "bg:#212736"
format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)'

[rust]
symbol = ""
style = "bg:#212736"
format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)'

[golang]
symbol = ""
style = "bg:#212736"
format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)'

[php]
symbol = ""
style = "bg:#212736"
format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)'

[time]
disabled = false
time_format = "%R" # Hour:Minute Format
style = "bg:#1d2230"
format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)'

編集を保存して閉じると以下のようになっていると思います。
update starship
プリセットとしてPastel-PowerlineTokyo-Nightがあるので、自分の好みに応じてカスタマイズしてみてください。

neovim

vimneovimの違いについては、ネットに詳しく解説している記事がたくさんあるので、そちらを参照してください。
init.luaを作成して設定していきましょう。

% mkdir ~/.config/nvim
% touch ~/.config/nvim/init.lua

設定することがたくさんあるので、init.luaでやることは設定ファイルを読み込むことくらいです。

options

luaモジュールを書くにあたって置き場所が決まっています。
runtimepathlua/フォルダ内に置いておけばinit.luaから読み込むことができます。

% mkdir ~/.config/nvim/lua
% touch ~/.config/nvim/lua/options.lua

それではoptions.luaに設定を書いていきます。

-- global
-- 24ビットRGBカラー有効化
vim.api.nvim_set_option('termguicolors', true)
-- ファイル末尾に移動した際に4行分の余白設定
vim.api.nvim_set_option('scrolloff', 4)
-- 検索時に大文字小文字無視
vim.api.nvim_set_option('ignorecase', true)
-- 検索時に大文字が含まれていたらignorecaseを無効化
vim.api.nvim_set_option('smartcase', true)
-- 置換時に画面下部に検索結果を表示
vim.api.nvim_set_option('inccommand', 'split')
-- クリップボードの有効化
vim.api.nvim_set_option('clipboard', 'unnamedplus')

-- window
-- 行番号表示
vim.api.nvim_win_set_option(0, 'number', true)
-- 相対行番号表示
-- vim.api.nvim_win_set_option(0, 'relativenumber', true)
-- カーソル行を強調
vim.api.nvim_win_set_option(0, 'cursorline', true)
-- 標識のためのスペースを最左列に設ける
vim.api.nvim_win_set_option(0, 'signcolumn', 'yes:1')
-- テキストの折り返しを無効化
vim.api.nvim_win_set_option(0, 'wrap', false)
-- 非表示文字の可視化
vim.api.nvim_win_set_option(0, 'list', true)
-- 指定したカラム列を強調
-- vim.api.nvim_win_set_option(0, 'colorcolumn', '100')

-- buffer
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWinEnter' }, {
  pattern = '*',
  group = vim.api.nvim_create_augroup('buffer_set_options', {}),
  callback = function()
    -- swapfile作成を無効化
    vim.api.nvim_buf_set_option(0, 'swapfile', true)
    -- tab幅
    vim.api.nvim_buf_set_option(0, 'tabstop', 2)
    -- tabをスペースに変換
    vim.api.nvim_buf_set_option(0, 'expandtab', true)
    -- オートインデントをtabstopの値に
    vim.api.nvim_buf_set_option(0, 'shiftwidth', 0)
  end
})

options.luaで設定し終わったらinit.luaから読み込みましょう。

require 'options'

options.luaを再度開くと以下のようになっていると思います。
update neovim
options.luaを少し解説したいと思います。
vimのoptionには、それぞれglobal,window,bufferがあります。
globalはnvim_set_option、windowはnvim_win_set_option、bufferはnvim_buf_set_optionをそれぞれ使って設定します。
例えばtermguicolorsを設定する場合、:help termguicolorsを開いて確認してみると、globalとの記載があるので、nvim_set_optionを使って設定します。
他に自分で設定を追加したい場合は、:helpを開いて確認してみましょう。

また、options.luaの後半に記載されているbufferの設定の仕方なのですが、nvim_buf_set_optionは起動直後に開いたバッファでしか有効になりません。
なので、autocmdという機能を使って他のバッファを開いても設定が有効になるようにしています。

keybind

vimの使い勝手を良くするためにkeybindを設定していきましょう。

% touch ~/.config/nvim/lua/keybinds.lua

keybinds.luaを編集します。

-- Normal to Command
vim.keymap.set('n', ':', ';')
vim.keymap.set('n', ';', ':')

-- automatically joump to end of text you pasted
vim.keymap.set('v', 'y', 'y`]')
vim.keymap.set({ 'v', 'n' }, 'p', 'p`]')

vim.keymap.set('n', 'ZZ', '<NOP>')
vim.keymap.set('n', 'ZQ', '<NOP>')

-- do not overwrite default register
vim.keymap.set('n', 'x', '"_x')
vim.keymap.set('n', 'X', '"_X')
vim.keymap.set('n', 's', '"_s')

-- leader
vim.api.nvim_set_var('mapleader', ',')
vim.api.nvim_set_var('maplocalleader', '\\')

-- window
vim.keymap.set('n', '<leader>h', '<C-w><C-h>')
vim.keymap.set('n', '<leader>j', '<C-w><C-j>')
vim.keymap.set('n', '<leader>k', '<C-w><C-k>')
vim.keymap.set('n', '<leader>l', '<C-w><C-l>')

-- buffer
vim.keymap.set('n', '<Tab>', ':bnext<CR>')
vim.keymap.set('n', '<S-Tab>', ':bprev<CR>')

編集したらinit.luaから読み込みます

require 'keybinds'

keybindについては好みがあると思いますので、自分が使いやすいように設定してください。
keybinds.luaを少し解説したいと思います。
keymap.setでkeybindを設定するのですが、keymap.set(モード, 変換前キー, 変換後キー)と使い方をします。
例を挙げるとvim.keymap.set('n', ';', ':')は、normalモード;:として使う設定になります。

lazy.nvim

いよいよneovimにプラグインを入れていくのですが、zshの時と同様にプラグインの利用を楽にするためにプラグインマネージャのlazy.nvimを利用します。

プラグイン用のフォルダを作成し、init.luaを作成します。

% mkdir ~/.config/nvim/lua/extensions
% touch ~/.config/nvim/lua/extensions/init.lua

Installationを参考にextentions/init.luaに以下を貼り付けます。

local plugins = {}
local opts = {
  checker = {
    enabled = true,
  },
  preformance = {
    cache = {
      enabled = true,
    },
    reset_packpath = true,
    rtp = {
      reset = true,
      paths = {},
      disabled_plugins = {
        "gzip",
        "matchit",
        -- "matchparen",
        -- "netrwPlugin",
        "tarPlugin",
        "tohtml",
        "tutor",
        "zipPlugin",
      },
    },
  },
}
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
  vim.fn.system({
    "git",
    "clone",
    "--filter=blob:none",
    "https://github.com/folke/lazy.nvim.git",
    "--branch=stable", -- latest stable release
    lazypath,
  })
end
vim.opt.rtp:prepend(lazypath)

require("lazy").setup(plugins, opts)

init.luaからextensionsを読み込みます。

require 'extensions'

保存して閉じた後にvimを起動し:Lazyを実行すると以下のような画面が見れると思います。
view Lazy
目に良くないですね、、、
これでプラグインをインストールする準備ができました。

color

見た目を良くするために以下のプラグインを入れていきましょう。

  • シンタックスハイライト
  • colorschema
  • ステータスラインをいい感じに
  • 検索した際の表示を見やすくしてくれる
  • エディタ上でgitの変更を表示してくれる
  • 拡張可能なスクロールバー

lua/extensions/init.luaを編集します。

local plugins = {
  {
    'nvim-treesitter/nvim-treesitter',
    event = { 'BufNewFile', 'BufReadPre' },
  },
  {
    'rmehri01/onenord.nvim',
    event = { 'VimEnter' },
    priority = 1000,
  },
  {
    'nvim-lualine/lualine.nvim',
    event = { 'VimEnter' },
    config = function() require 'extensions.lualine' end,
  },
  {
    'kevinhwang91/nvim-hlslens',
    event = { 'FilterWritePre' },
  },
  {
    'lewis6991/gitsigns.nvim',
    event = { 'BufReadPre' },
  },
  {
    'petertriho/nvim-scrollbar',
    event = { 'BufNewFile', 'BufReadPre' },
  }
}

保存したら:LazyコマンドでLazy画面を開きShift + SSyncを実行しましょう。
プラグインがロードされたかと思います。
sync Lazy
lua/extensions/init.luaに追加した内容を少しだけ解説します。

  {
    -- プラグイン名
    'rmehri01/onenord.nvim',
    -- プラグインをロードするタイミング
    event = { 'VimEnter' },
    -- プラグインのロード優先度
    priority = 1000,
  },

eventについては定義しなかった場合、vimが立ち上がった時にロードされます。
onenord.nvimは、VimEnterを指定しているので、全ての起動処理が終わった後にロードされます。
イベントの一覧はこちらにありますし、:help autocmd-eventsから閲覧することができます。

各種プラグインの設定を書いていきたいのですが、全てのプラグインを書くと結構な量になってしまうので、今回はonenord.nvimを例に挙げます。
プラグインごとに設定ファイルを作り、lua/extensions/init.luaで読み込むようにします。

% touch ~/.config/nvim/lua/extensions/onenord.lua

lua/extensions/onenord.luaにはConfigurationを参考にしながら設定を記載します。

local colors = require('onenord.colors').load()

require('onenord').setup {
  theme = 'dark',
  styles = {
    comments = 'NONE',
    strings = 'NONE',
    keywords = 'bold',
    functions = 'bold',
    variables = 'NONE',
    diagnostics = 'underline',
  },

  disable = {
    background = true,
  },

  custom_highlights = {
    MatchParen = { fg = colors.none, bg = colors.none, style = 'bold,underline' },
    GitSignsAddLnInline = { fg = colors.none, bg = colors.none, style = 'underline' },
    GitSignsChangeLnInline = { fg = colors.none, bg = colors.none, style = 'underline' },
    GitSignsDeleteLnInline = { fg = colors.none, bg = colors.none, style = 'bold,underline' },
  },

  custom_colors = {
    mypink = '#FFB2CC',
  },
}

lua/extensions/onenord.luaを編集したらlua/extensions/init.luaから設定を読み込みます。

  {
    'rmehri01/onenord.nvim',
    event = { 'VimEnter' },
    priority = 1000,
    config = function() require 'extensions.onenord' end,
  },

plugins変数内のonenord.nvimブロックにconfigを追加し、先ほど作ったlua/extensions/onenord.luaを読み込むようにしました。
保存して再度開くと以下のような色合いになると思います。
load onenord
目に優しい見た目になりましたね。

telescope.nvim

拡張性の高いファジーファインダーです。

またfzfを使いたいのでtelescope-fzf-native.nvimdependenciesに追加します。

まずlua/extensions/telescope.luaを作成し設定していきます。

% touch ~/.config/nvim/lua/extensions/telescope.lua
local telescope = require 'telescope'
local themes = require 'telescope.themes'

telescope.setup {
  defaults = {
    mappings = {
      i = {
        ['<C-h>'] = 'which_key',
        ['<esc>'] = require('telescope.actions').close,
        ['<C-[>'] = require('telescope.actions').close,
      },
      n = {
        ['<C-h>'] = 'which_key',
      }
    },
    winblend = 20,
  },
  extensions = {
    fzf = {
      fuzzy = true,                   -- false will only do exact matching
      override_generic_sorter = true, -- override the generic sorter
      override_file_sorter = true,    -- override the file sorter
      case_mode = "smart_case",       -- or "ignore_case" or "respect_case"
      -- the default case_mode is "smart_case"
    },
  },
}
telescope.load_extension 'fzf'

local builtin = require 'telescope.builtin'

vim.keymap.set('n', '<leader>ff', builtin.find_files)
vim.keymap.set('n', '<leader>fg', builtin.live_grep)
vim.keymap.set('n', '<leader>fb', builtin.buffers)
vim.keymap.set('n', '<leader>fh', builtin.help_tags)
-- vim.keymap.set('n', '<leader>h', function()
--   builtin.help_tags(themes.get_ivy())
-- end)

lua/extensions/init.luaにてtelescopeを読み込みます。

  {
    'nvim-telescope/telescope.nvim',
    keys = {
      '<leader>ff', '<leader>fg', '<leader>fb', '<leader>fh'
    },
    tag = '0.1.4',
    config = function() require 'extensions.telescope' end,
    dependencies = {
      'nvim-lua/plenary.nvim',
      'nvim-tree/nvim-web-devicons',
      { 'nvim-telescope/telescope-fzf-native.nvim', build = 'make' },
    },
  },

保存して閉じたら再度vimを開き、Leader + ffを打ってみましょう(私の場合は, + ff)。以下の画面が開きファイル検索できると思います。
telescope

nvim-tree

ファイルエクスプローラーです。

他のプラグイン同様に読み込み:NvimTreeOpenを実行すると以下のようにファイルツリーを見ることができます。
nvim-tree
私はコマンド打つのが面倒なのでLeader + exで開くようにしています。

Language Server Protocol(lsp)

lspを詳細に書きたいのですが、長くなってしまうのでまた次回に解説したいと思います。
lspについてはプラグインの紹介にとどめたいと思います。

  • NeoVimLSPClientの設定です。
  • LSPサーバーやDAPサーバー、linter, formatterを簡単にインストール及び管理できます
  • lspconfigとmasonを橋渡ししてくれます
  • LSPコード補完をサポートしてくれます

設定すると以下のようにlspが動くと思います。
lsp

other

ここでは紹介していないプラグインや詳細な設定についてはリポジトリを参照していただければと思います。
https://github.com/disk-inue/dotfiles/tree/work-article/nvim

まとめ

長々とお付き合いいただきありがとうございました。
LSPの部分は流してしまったので、紹介できなかったプラグインと共に追って記事にしたいと思います。
まだまだ私も使い始めたばかりのひよっこなので、おすすめのプラグインや設定ありましたらコメントいただければと思います。

君もイカしたTerminal環境で開発してみなイカ?🦑


明日は@shimabukuromegさんです。
よろしくお願いします。

株式会社モニクル

Discussion

kuukuu

個々のおすすめ設定はそれこそたくさんあって逆に何を紹介したらいいのか分からないですが、そういう話をずっとしているvim-jp slackというコミュニティがあります(ZennにもPublicationがあります)。よければ参加してみてはいかがでしょうか。
ちなみにVim以外にも色々な話題で盛り上がっていて、ターミナル周りの話は #tech-cli というチャンネルで行われています。

disk_inuedisk_inue

たくさんあるんですね!
コミュニティの共有ありがとうございます!

nixnix

disk_inueさん、お疲れ様です。
startship.tomlの内容末尾のシングルクオートが抜けてそうだったため念のための共有になります。

‐ format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)
+ format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)'

本記事を参考に導入中です!