最近手贱把 vim 的插件更新了,结果造成了 break changes,真的是后悔莫及。虽然进行了一定程度的修补,到了勉强能够继续用的程度,但是以为不想再经历一次 break changes,所以我把 vim 环境你迁移到了 LazyVim(虽然以前也是 Lazyvim 改造的环境),这样就不用这么折腾了。趁着这次迁移,我还把之前使用的 ohmyzshoh my tmux 给替换了。这篇文章主要是记录我的 Mac 环境和踩的坑,方便以后查看

joshuto

joshuto 是一个终端下的文件浏览器,和ranger 类似,但是使用 Rust 重写的。joshuto 的基本上能够 cover ranger 的所有功能(包括文件预览、排序、重命名、搜索、打开等),而且速度更快。B 站 CW 大佬写了一个 joshuto 的 vim 插件,可以在 vim 中打开 joshuto,目前该作者已经与 joshuto 的作者取得了联系,应该不会弃坑不顾,所以可以放心使用

下面是 joshuto 的文件结构,还是挺简洁的,我个人基本上只修改了 keymap.toml,修改为了更加贴近 vim 的方式

1
2
3
4
5
6
7
8
joshuto
├── bookmarks.toml # 书签,可以快速进入制定指定的目录
├── icons.toml # 可以给目录、文件定义图标
├── joshuto.toml # joshuto 的环境配置
├── keymap.toml # 在这里可以修改快捷键
├── mimetype.toml # 可以指定文件默认以什么方式打开
├── preview_file.sh # 文件预览脚本
└── theme.toml # 可以修改配色

fzf

fzf 是一个终端下使用 Go 编写的模糊查找工具,它可以接受一个数据,然后打开一个窗口显示输出。通过 fzf,我们可以做到文件搜索、历史记录查询、路径补全等很多功能,具体可以看文档。在上面的 joshuto 中的也支持 fzf 模糊搜索,vim 中也可以使用 fzf 进行搜索。

我主要为 joshuto、zsh、tmux 配置了 fzf,主要用来搜索文件、查看历史记录、路径补全

zsh

我之前使用的是 ohmyzsh ,虽然很好用,但是他是一个框架,包含了太多我不需要的功能了,所以会很慢。我现在使用的是自己定制的 zsh + zim 插件管理器,体验相当顺滑

zim 的使用也很简单,安装插件时只需要在 zimrc 中添加,然后 source .zshrc 就可以了,具体可以看官方仓库的教程

需要注意的是zim 的默认主题是 asciiship,自带命令行提示符,而其他主体可能没有,需要安装命令行提示符,这也是我踩的第一个坑

1
zmodule prompt-pwd

第二个坑是 autojump 插件。我之前在 ohmyzsh 中使用时不需要做额外的配置,但是现在需要再 zsh 中显示声明,这一点我还是 brew info 的时候才知道的。zim 中好像有一个类似的插件,但是由于之前一直使用的是 autojump,就懒得换了

1
[ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh

第三个坑是 zsh 中输入中文的时候会乱码,需要再 zshrc 中加入下面这些配置

1
2
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

我还在 zsh 中配置了 fzf,实现了路劲补全、目录搜索、历史记录搜索等功能。这些功能主要还是抄的各位大佬的配置以及官方给出的脚本,感谢这些大佬。除此之外,我还为 fzf 配置了预览窗口,相关脚本主要是从 joshuto 中借鉴过来的(感谢 joshuto :))

tmux

tmux 是一个终端复用神器,之前我也记录了一些 tmux 的学习笔记。

我之前使用的是 oh my tmux ,但是这个也比较慢,所以我决定也自己来配置 tmux。tmux 的一些配置实例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 修改前缀指令
set -g prefix C-a
unbind C-b
bind C-a send-prefix # 绑定Ctrl+a为新的指令前缀

# 加载配置文件
bind r source-file ~/.config/tmux/tmux.conf \; display-message "Config reloaded.."

# bind -r 绑定的键需要使用 prefix + key 才能使用
bind -r k select-pane -U # 绑定k为↑

# 使用 bind -n 可以省去输入 前缀键的麻烦
bind -n M-0 select-window -t 0

tmux 的插件管理器我使用的是 tpm,使用起来也很简单,需要什么插件只需要添加即可。添加完成之后,可以使用使用 prefix + I 安装插件,也可以使用 prefix + alt + u 卸载插件

1
2
3
4
5
set -g @plugin 'tmux-plugins/tpm'
# Other examples:
set -g @plugin 'sainnhe/tmux-fzf'

run '~/.tmux/plugins/tpm/tpm'

我还在 tmux 中配置了 fzf,其中包括 tmux-fzf 插件。这个插件有个黑魔法,可以在配置中为插件中的脚本绑定快捷键,这样可以快速使用插件的功能

1
2
bind-key "C-s" run-shell -b "~/.config/tmux/plugins/tmux-fzf/scripts/session.sh"
bind-key "C-w" run-shell -b "~/.config/tmux/plugins/tmux-fzf/scripts/window.sh"

在 tmux 中我也碰到了一些坑

  1. tmux 中使用 autosuggests 插件中的的组合键(比如 Ctrl + f )时不会生效,而是直接将字符打印到终端上。解决方法在 zshrc 中为其进行键位绑定
1
bindkey '^f' autosuggest-accept
  1. tmux 中使用 fzf 也遇到了和问题 1 中类似的问题。解决方法是在 fzf 配置中加入 tmux 的配置
1
2
export FZF_TMUX=1
export FZF_TMUX_HEIGHT='80%'
  1. 在 tmux 的配置文件中设置的背景颜色部分不生效,需要每次进入 tmux 是重新加载一次配置。我目前的解决方法是在主题中写死,比如我在我使用的 tmux-powerline 中加入了这两行
1
2
export TMUX_POWERLINE_WINDOW_STATUS_CURRENT='#[fg=magenta,bold] #I #W:#F'
export TMUX_POWERLINE_WINDOW_STATUS_FORMAT='#[fg=brightblue] #I #W '

vim

最开始我使用的是 packer 插件管理器,但是我们配置出来的效果有点慢,启动速度接近 200ms,所以我转向了 lazy.vim。lazy.vim 的作者又一款集成框架 LazyVim,我刚开始觉得 LazyVim 中的插件都写死了,不够灵活,所以抄了他的配置,然后配置自己的插件(主要是之前 packer 中使用的插件)。但是经过这次 break changes 之后,我决定直接投靠 LazyVim 了,毕竟 LazyVim 的作者是 folke,是不会跑路的 :)

虽说投靠了 LazyVim,但是还是需要一番调教才能有之前的体验感,我主要修改了插件的快捷键,然后添加了 lspsaga 来美化一些提示信息。我之前以为 lspsage 的作者跑路不更新了,所以一直以来使用的都是另一个版本的 lspsaga(这个版本也好几个月没更新了)。后来发现只是作者那段时间一直在医院(躺了几年?,祝好),最近又开始更新了,所以又转向了原作者。

配置 lspsage 的时候发现作者是个肝帝,写了还多插件,而且作者还是个国人,在 B 站也有好。

配置 lspsage 的时候也有很多问题,第一个问题是在 lsp、telescope、lspsage 之间选择,最终我决定将文件搜索和关键词搜索交给 telescope,将诊断相关的功能交给 lspsage,然后将普通的 gd gD 等功能交给 lsp

lspsage 除了 lsp 相关的功能,还有许多其它 “花里胡哨” 的功能,比如文件大纲、浮动中断、模糊查找、代码调用层次查看等。为了少安装几个插件,所以我把 symbols-outline替换掉了。我本来想把 LazyVim 自带的浮动终端也给替换掉的(因为 lspsage 的浮动中断比较好看),但是由于它集成在了 lazy.vim 中,只能禁用,不能卸载,所以只好将就一下,并将原来的浮动中断加了边框,让它变得 “好看” 了一点。

在配置 lspsaga 的时候也碰到了很多问题,不过主要的问题集中在消息提醒上

  1. *.go 文件中移动的时候会一直触发 code_action null-ls 的消息,所以我想着把他给去掉。我查遍了各个文档都没法将他去掉,而且这个插件不能禁用,仅用了会抱错。所以一气之下写了下面的配置(其实主要是不知道这个触发的是哪种事件)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
opts = {
routes = {
{
filter = {
event = "msg_show",
any = {
{ find = "%d+L, %d+B" },
{ find = "; after #%d+" },
{ find = "; before #%d+" },
{ find = "%d+" },
},
},
},
{
filter = {
any = {
{ find = "code_action null" },
{ find = "# Plugin Updates" },
},
},
},
},
},
},
  1. lspsaga 在文件大纲中移动时,会插线一个消息,显示这段代码有多少行,对我来说也是不必要的,所以我也在上面的配置中将其去掉了

在配置 vim 的时候还有一个问题,就是 git 相关的文件的颜色问题,这个问题相当奇怪。当一个文件修改过后,他的颜色有时候是灰色的,有时候是橙色的,并不统一,明明我之前都用着好好的。我试过几种办法

  1. 在 neo-tree 中修改颜色,但是这里面修改的是背景色,效果太突兀了
  2. 更换主题,但是这个主题我还挺喜欢的
  3. 修改主题中相关配置

最后我选择了第三种方法。但是结果还是类似,只不过有时是我该的颜色,有时变为了橙色。所以将它的颜色修改了为了橙色。为了让两者颜色统一,还挺花了一段时间。虽然没从根本上解决问题,但是看起来没那么糟心了

比较不幸的是,在迁移 vim 的时候我把之前定义的 spell 拼写检查和 snippets 给搞不见了,而且我也忘了之前是从哪里下载的了,所以又得重新搜索下载

raycast

raycast 是一款很好用的工具,可以很好地提升效率,而且还免费。我主要装了下面这几个插件:

  • Clipboard History(好像是自带的)
  • Kill Process 用来杀死进程
  • Quit Applications 用来退出单个程序
  • Google Chrome
  • Navigation 可以快速切换应用,搭配快捷键很好用
  • Execute Shell Command 可以执行 shell 脚本
  • Search Books 可以搜书
  • Search Project Manager 需要 vscode 中安装 Project Manager

yabai

yabai 是一个桌面管理工具,可以在窗口、工作空间之间快速切换。我主要搭配了 skhd 一起使用,这样就可以自定义快捷键切换工作空间,并在窗口之间切换焦点了。

之前还用过 spacebar(一个状态栏) 和 sketchyBar(也是一个状态栏,可以定制)。后来发现自己并不怎么需要这些东西,所以就没装了。