君もイカしたTerminal環境で開発してみなイカ?(wezterm, zsh, starship, neovim)
Introduction
私が今回構築した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が起動するでしょう。
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になったと思います。
wezterm
wezterm
はwezさんが個人で開発しているRustで実装されたGPUアクセラレーションのマルチプラットフォームターミナルエミュレータです。(英語を直訳)
今回なぜwezterm
を選んだのかというと、lua言語で設定を記載できること、マルチプラットフォームであることが挙げられます。
- lua言語で設定を記載できる
後述するneovimでもlua言語を利用して設定を記載するので、同じ言語でメンテナンスできることは頭の切り替えが少なくて良いと思います。
また、iTerm2(私が今まで使っていたTerminal)と違って設定を外部ファイルで管理できることによってバージョン管理ができます。 - マルチプラットフォームである
私がこれまで使っていた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
で設定ファイルを再読み込みすると以下のようになると思います。
今度は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
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 + %
にしています。
分割した画面の移動をLEADER + hjkl
にしています。
other
他にもWindowTitleやTab,StatusBarのカスタマイズができるので、公式ドキュメントやリポジトリを参考にしてみてください。
starship
wezterm
をカスタマイズしていい感じにしたので、starship
をカスタマイズしてShellPromptをいい感じにしましょう。
starship
は、Rustで実装されたマルチプラットフォームでカスタマイズ可能なプロンプトです。
カスタマイズしていく前に.zshrc
に以下を追記します。
eval "$(starship init zsh)"
exec $SHELL
をすると以下のようになると思います。
見える情報量が増えましたね。
設定を参考に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)'
編集を保存して閉じると以下のようになっていると思います。
プリセットとしてPastel-PowerlineやTokyo-Nightがあるので、自分の好みに応じてカスタマイズしてみてください。
neovim
vim
とneovim
の違いについては、ネットに詳しく解説している記事がたくさんあるので、そちらを参照してください。
init.lua
を作成して設定していきましょう。
% mkdir ~/.config/nvim
% touch ~/.config/nvim/init.lua
設定することがたくさんあるので、init.lua
でやることは設定ファイルを読み込むことくらいです。
options
luaモジュールを書くにあたって置き場所が決まっています。
runtimepath
のlua/
フォルダ内に置いておけば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
を再度開くと以下のようになっていると思います。
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
を実行すると以下のような画面が見れると思います。
目に良くないですね、、、
これでプラグインをインストールする準備ができました。
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 + S
でSync
を実行しましょう。
プラグインがロードされたかと思います。
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
を読み込むようにしました。
保存して再度開くと以下のような色合いになると思います。
目に優しい見た目になりましたね。
telescope.nvim
拡張性の高いファジーファインダーです。
またfzf
を使いたいのでtelescope-fzf-native.nvim
をdependencies
に追加します。
まず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
)。以下の画面が開きファイル検索できると思います。
nvim-tree
ファイルエクスプローラーです。
他のプラグイン同様に読み込み:NvimTreeOpen
を実行すると以下のようにファイルツリーを見ることができます。
私はコマンド打つのが面倒なのでLeader + ex
で開くようにしています。
Language Server Protocol(lsp)
lspを詳細に書きたいのですが、長くなってしまうのでまた次回に解説したいと思います。
lspについてはプラグインの紹介にとどめたいと思います。
- NeoVimLSPClientの設定です。
- LSPサーバーやDAPサーバー、linter, formatterを簡単にインストール及び管理できます
- lspconfigとmasonを橋渡ししてくれます
- LSPコード補完をサポートしてくれます
設定すると以下のようにlspが動くと思います。
other
ここでは紹介していないプラグインや詳細な設定についてはリポジトリを参照していただければと思います。
まとめ
長々とお付き合いいただきありがとうございました。
LSPの部分は流してしまったので、紹介できなかったプラグインと共に追って記事にしたいと思います。
まだまだ私も使い始めたばかりのひよっこなので、おすすめのプラグインや設定ありましたらコメントいただければと思います。
君もイカしたTerminal環境で開発してみなイカ?🦑
明日は@shimabukuromegさんです。
よろしくお願いします。
Discussion
個々のおすすめ設定はそれこそたくさんあって逆に何を紹介したらいいのか分からないですが、そういう話をずっとしているvim-jp slackというコミュニティがあります(ZennにもPublicationがあります)。よければ参加してみてはいかがでしょうか。
ちなみにVim以外にも色々な話題で盛り上がっていて、ターミナル周りの話は
#tech-cli
というチャンネルで行われています。たくさんあるんですね!
コミュニティの共有ありがとうございます!
disk_inueさん、お疲れ様です。
startship.tomlの内容末尾のシングルクオートが抜けてそうだったため念のための共有になります。
本記事を参考に導入中です!
指摘ありがとうございます!修正しました!