イケてる開発環境を作りたい(zsh + neovim + tmux)
こんにちは。42tokyo Advent Calendar 2021の23日目を担当する在校生のrsudoです。
今回の記事では、自分の開発環境の一部を「見た目」という観点で紹介したいと思います。各ツールのインストール方法やキーバインド等の説明は割愛させてもらいます。
見た目は人によって好みが別れると思うので、あくまで参考程度に見てください。
自分のターミナル環境は下の画像のようになっています。
(このコマンド使いたかっただけです。) AlacrittyはRust製で、GPUレンダリングを用いた描画を行う高速なターミナルです。元々はiTermを使っていたのですが、vimのカーソル移動の遅さが気になってAlactittyを使うようになりました。 設定ファイルはGitHubにテンプレやカラーテーマなどの書き方が載っているので、それを参考に作成しました。
自分はGruvboxというテーマを使用しています。 よく分からないものを色々入れられるのが嫌な人や、自分でカスタマイズしたい人は向いてないかもしれないです。 正直、覚え切れない量のエイリアスが設定されるなど、機能を持て余している感覚があります。
似たものとして、preztoがありますがこちらはoh-my-zshと比較すると軽く、評判が良さそうです。 参考 :
zshフレームワークの起動速度&設定の楽さ比較! - Qiita
zshrcに以下の記述をするとmanにシンタックスハイライトをつけることができます。
lessコマンドやmanコマンドを使用する際に参照される環境変数をmanが呼ばれるときに定義しています。 参考 :
manコマンドで表示されるドキュメントの色付けをカスタマイズ - Steel Dragon 14106 前述したoh-my-zshでgitのプラグインを設定すると登録されるエイリアスの一部を紹介します。 詳しくはこちら :
ohmyzsh/git.plugin.zsh at master · ohmyzsh/ohmyzsh · GitHub コマンドラインを色付けして、見やすくしてくれます。実行前に存在するコマンド・ファイルかどうか分かるので、タイポを防ぐ効果があります。 有効なコマンドの場合は緑色に表示され、存在するファイルの場合下線が表示されます。
無効なコマンドの場合、赤く表示されます。
質問に答えていく形式で簡単にプロンプトをアレンジすることができます。
oh-my-zshのプロンプトテーマも色々あったのですが、個人的にあまり気に入らず、自分でアレンジするのも面倒だったので導入しました。 tmuxは複数のターミナルを開いて平行作業ができるソフトウェアです。iTermでは画面分割等が備わっていたので必要なかったのですが、Alacrittyを使うタイミングでtmuxも使用するようになりました。 こんな感じになりました。
1つ目のタブでvimを開いてファイルを編集、二つ目のタブでコマンドを実行することが多いです。 続いてneovimの紹介です。自分のneovim環境は下のようになっています。
見た目に関係する設定はあんまりないですね。プラグイン管理はdeinを使用しています。 今はgruvboxを使用しています。
github.com 左側にファイルツリーを表示してくれるプラグインです。ついでにvim-deviconsというプラグインも入れてアイコンも表示させました。 vimのシンタックスはvscode等のエディターと比較してシンタックスが物足りないのでプラグインを入れました。これはneovimを使用している必要があるので、ノーマルのvimを使っている方は別のプラグインを探す必要があります。 参考 : nvim-treesitterを勧めたい ステータスラインをいじれるプラグインはたくさんあるのですが、自分はlightlineというプラグインを入れました。設定を書いて表示を変更することもできます。 下の設定でやってること 参考 : lightline.vimを使ってVimのステータスラインを有効活用する - yuhei.kagaya ファイルの左側にgitの差分を表す記号を表示してくれます。 catの進化系コマンドで、シンタックスを付けて見やすく出力してくれます。 コピペするときに行数が邪魔になる場合は、 設定ファイルに記述して、テーマや出力形式を変更することもできます。
lsの進化系コマンドです。
上の画像のように、 GoのソースファイルのアイコンがGopher君なのがポイント高いですね。
ひたすらリンクと画像を貼るだけの雑な紹介になってしまいましたが、少しでも参考になれば幸いです。
一応自分のdotfileを以下に公開しておきますが、全く整理していないので可読性は期待しないでください。 明日は、@tacomeaさんが「LINEボットにオススメ機能を付けてみた」という記事を書いてくれる予定ですので、そちらの記事もお楽しみに!実行環境
ターミナル
Alacritty
メリット
.config/
ディレクトリ内のファイルに記述するため管理しやすい。デメリット
シェル(zsh)
oh-my-zsh
メリット
デメリット
zshrc
manの色付け
man() {
env \
LESS_TERMCAP_mb=$(printf "\e[1;33m") \
LESS_TERMCAP_md=$(printf "\e[1;33m") \
LESS_TERMCAP_me=$(printf "\e[0m") \
LESS_TERMCAP_se=$(printf "\e[0m") \
LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
LESS_TERMCAP_ue=$(printf "\e[0m") \
LESS_TERMCAP_us=$(printf "\e[1;32m") \
man "$@"
}
gitコマンドのエイリアス
❯ alias glol
glol='git log --graph --pretty='\''%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'\'
❯ glol
* dbad735 - (HEAD -> rsudo, origin/rsudo) add 42header (3 months ago) <rsudo>
* 2203d7c - Merge pull request #134 from r-i0/rakiyama (3 months ago) <rsudo>
|\
| * 6e91a59 - support ft_strdoll (3 months ago) <rakiyama>
* | 65e8621 - Update github-actions-demo.yml (3 months ago) <rsudo>
* | 2219cde - Update github-actions-demo.yml (3 months ago) <rsudo>
|/
* b71af52 - Merge pull request #133 from r-i0/rakiyama (3 months ago) <rsudo>
|\
| * 3317b80 - mod exit (3 months ago) <rakiyama>
❯ alias glols
glols='git log --graph --pretty='\''%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'\'' --stat'
❯ glols
* dbad735 - (HEAD -> rsudo, origin/rsudo) add 42header (3 months ago) <rsudo>
|
| srcs/clear_list.c | 12 ++++++++++++
| srcs/command_builtin1.c | 12 ++++++++++++
| srcs/command_builtin2.c | 12 ++++++++++++
| srcs/command_builtin3.c | 12 ++++++++++++
| srcs/command_nonbuiltin.c | 12 ++++++++++++
| srcs/delimit_fd.c | 12 ++++++++++++
❯ alias gsb
gsb='git status -sb'
❯ gsb
## main...origin/main
M philo/srcs/main.c
?? a.out
?? philo_bonus/
?? test.c
zsh-syntax-highlighting
powerlevel10k
tmux
ステータスラインを変更
## ステータスラインの見た目の変更
# 256色モードを有効にする
set-option -g default-terminal screen-256color
set -g terminal-overrides 'xterm:colors=256'
# ステータスラインの色を変更
setw -g status-style fg=colour255,bg=colour234
# status-leftを非表示にする
set -g status-left ""
# status-rightを非表示にする
set -g status-right ""
# 中央揃えにする
set -g status-justify centre
# 上部にステータスを表示
set-option -g status-position top
set -g status-fg white
set -g status-bg default
set -g renumber-windows on
set -g automatic-rename on
set-option -g -q mouse on
# window-statusの見た目を変更
setw -g window-status-current-format "#[bg=default,fg=colour10,reverse]▓▒░ #W ░▒▓"
setw -g window-status-format "#[bg=default,fg=colour8,reverse]▓▒░ #W ░▒▓"
neovim
基本設定
" タブ幅
set tabstop=4
set shiftwidth=4
" 常にタブラインを表示
set showtabline=2
" スペース、タブ、改行を可視化
set list
set listchars=tab:\▸\ ,trail:-,eol:↲,extends:»,precedes:«,nbsp:%
おすすめプラグイン
テーマ
nerdtree
nvim-treesitter
lightline
let g:lightline = {
\ 'colorscheme': 'wombat',
\ 'active': {
\ 'left': [ [ 'mode', 'paste' ],
\ [ 'fugitive', 'filename' ] ]
\ },
\ 'component': {
\ 'lineinfo': ' %3l:%-2v',
\ },
\ 'component_function': {
\ 'fugitive': 'MyFugitive',
\ 'gitbranch': 'fugitive#head',
\ },
\ 'separator': { 'left': "\ue0b0", 'right': "\ue0b2" },
\ 'subseparator': { 'left': "\ue0b1", 'right': "\ue0b3" },
\ }
function! MyFugitive()
try
if &ft !~? 'vimfiler\|gundo' && exists('*fugitive#head') && strlen(fugitive#head())
return ' ' . fugitive#head()
endif
catch
endtry
return ''
endfunction
vim-gitgutter
おすすめコマンド
bat
-p
オプションをつけると行数を表示せず出力できます。❯ bat ~/.config/bat/config
File: /Users/sudourio/.config/bat/config
1 --theme="gruvbox-dark"
2
3 # Show line numbers, Git modifications and file header (but no grid)
4 --style="numbers,changes,header"
5
exa
--icons
オプションを付けると出力されるアイコンが可愛いので最近導入しました。-T
オプションでtree形式で出力することもできます。
以下のエイリアスを設定しています。alias e='exa --icons'
まとめ