update:测试发现有一点点bug,对applescript做了一点修改,请使用上一个版本的读者更新一下。
精简版
知道我在做什么的可以直接查看Markdown-Preview.nvim里我的回复:github链接
环境
- macos
- iTerm
- neovim(lazyvim)
工作流
想打通vim+markdown甚至+obsidian的工作流。
想用vim编写markdown,git做版本管理,obsidian做浏览和多平台同步。
本文聚焦的是第一步:vim编写markdown并预览,后续如果有必要会更新后面的工作流比较麻烦的部分。
插件
vim的markdown preview插件:Markdown-Preview
按照readme的方法安装就好,如果和我一样是lazyvim用户,插件安装步骤如下:
- 在~/.config/nvim/lua/plugins文件夹下面新建一个
markdown-preview.lua
,内容如下:
return {
"iamcco/markdown-preview.nvim",
cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
ft = { "markdown" },
build = function()
vim.fn["mkdp#util#install"]()
end,
lazy = true;
}
- 退出nvim,重新打开,vim会自动安装
- 使用:
在normal模式下有三个命令::MarkdownPrevew
:MarkdownPreviewStop
:MarkdownPreviewToggle
具体什么作用本文就不解释了,查看github就可以。最常用的就是第一个命令了:打开一个浏览器页面查看md文件的预览。
vim+chrome自动分屏预览markdown
上面插件很好,用magnet手动调整一下分屏就可以了,但是我最近被vim惯坏了,什么都不想用鼠标,能自动化最好,于是出现了本篇文章。
其实最好的方式是使用yabai等窗口管理工具来做分屏管理,但是个人觉得窗口平铺的需求在我这里不是那么大,还要关闭SIP,不是很想弄。
所以最终使用的方案是写一个applescript来自动分屏窗口,在nvim中绑定一个快捷键,完成以下操作:
- 首先调用自动分屏的script,左边iterm(nvim),右边新建一个chrome窗口。
- 然后在vim编辑器里输入插件命令
:MarkdownPreview
,就可以在新开的chrome窗口里打开预览了。
最终效果
先把最终的效果放上来:
在md文件敲预览快捷键(我的是<leader>mp
)之后自动分屏并预览
Steps
- 创建一个applescript文件,随便放在哪里。
我的文件名叫:mkdp_windowSplit.applescript
放在:~/.config/nvim/scripts/
里面
内容如下:
set Height to 1120 -- 这个地方改为你屏幕的高度
set Width to 1792 -- 改为屏幕的宽度
set bar to 24 -- 苹果顶部导航栏的高度
set halfHeight to Height / 2
set halfWidth to Width / 2
-- 检查应用是否在全屏状态
tell application "iTerm" to set screenSize to bounds of front window
set rightX to item 3 of screenSize
if rightX is equal to Width then
-- 关闭iTerm的全屏状态
tell application "System Events"
tell process "iTerm2"
click (first menu item whose name is "Toggle Full Screen") of menu "View" of menu bar 1
end tell
end tell
delay(0.5)
end if
-- 打开Chrome并放置在右侧
tell application "Google Chrome" -- 也可以是"firefox"等等浏览器
make new window -- 创建新窗口来打开preview
set the bounds of the first window to {halfWidth, bar, Width, Height}
end tell
-- 调整iTerm大小并放置到左侧
tell application "iTerm"
activate
set the bounds of the first window to {0, bar, halfWidth, Height}
delay(0.5)
end tell
注意:上面的延时函数都是经过测试之后添加的,最好不要删除。因为程序执行打开、最小化等操作需要时间,如果在上一个操作还没有完成就执行下一条自动化命令,可能会出现奇怪的bug。
如果还是有奇怪的bug比如窗口开在别的桌面啥的,可以适当增加一下延时的时间。
针对自己的电脑按照注释修改上面的参数
如果会写applescript的话,也可以以我的代码为蓝本修改为自己想要的效果。
- nvim设置快捷键
我用的是lazyvim,快捷键设置的文件为:~/.config/nvim/lua/config/keymaps.lua
,如果用的是其他版本的vim,修改哪里根据自己的情况来定哈。
neovim可以用lua来修改配置,下面就是用lua写的,如果是vim,要修改成vim的语法,具体怎么修改请google/gpt。
修改keymaps.lua文件,添加下面一行:
vim.keymap.set("n", "<leader>mp", ":silent !osascript /absolute/path/to/file.applescript<cr>:MarkdownPreview<cr>", { desc = "markdown preview", remap = true, silent = true})
- 上面第二个参数是设置的快捷键,按照自己的喜好设置。
- 其中地址也要改一下,改成到第一步写的applescript的绝对地址。必须是绝对地址,因为调用这个脚本的md文件有不一样的地址,如果用相对地址会找不到文件位置。
配置就已经完成了,不管iterm是不是全屏都可以正常分屏,满足了我自己的需求。