| |
|
知识库 -> 数码 -> Vim 到底可以配置得多漂亮? -> 正文阅读 |
|
[数码]Vim 到底可以配置得多漂亮? |
[收藏本文] 【下载本文】 |
求一个极限, 配置成如下样式: 请问还有什么可以美化和提升的地方么? 或者一些美化的插件, 或者补丁. OS: Windows 7 SP1 Ultim… |
我已经尽力让它看起来像 vscode 了.. |
![]() |
--- 一觉睡醒 突然炸了--- 再补几张图吧。 |
![]() |
|
![]() |
|
![]() |
仓库地址: https://github.com/askfiy/SimpleNvim 主题是我自己写的: https://github.com/askfiy/visual_studio_code?github.com/askfiy/visual_studio_code -- 正经一下,为什么用 vim -- 最初我用 jb 家的产品,大概一年,奈何启动速度慢。 后面用了 vscode,但那时候 vim 插件非常卡。 原因是 vim 插件和其他插件公用一个线程,影响编辑体验,卡到批爆。现在在 vscode 的仓库里搜性能问题,估计还能搜出一大堆。 换了 nvim vscode 插件,可视模式有问题。弃坑… vsc 总共用了大半年吧,我还是挺喜欢他的… 一个最重要的原因就是手腕疼,那时候天天晃鼠标,一到晚上就疼… --- 另外我用 wm 而不是 de,vim 恰好能配合我的工具链。 Range tmux dwm lazygit firfox 的 vim 插件 一整套下来我完全可以丢掉鼠标。 我百分之 99% 的时间都在 terminal 中,可以快速去到任何我想去的目录。 nvim 最吸引我的是它的自由度。你不爽的地方你都可以改,可以改源码重新编译,可以撸你自己想要的插件而且非常简单。启动速度超快,基本 50 毫秒左右搞定… 我想要的功能,现有插件不具备我的需求就自己撸一个,总会有解决办法的。 如果以上你都觉得没有说服力,那么最后一个原因就是: 我乐意!!! |
漂亮是次要的,顺手是主要的。 我用的是neovim,neovim用lua配置,比vimscript好写多了,而且还快。 一共用了36个插件/配色方案,用packer管理插件,用mason管理lsp,一共只装了5个lsp,主要写点python,c,还有LaTeX写写论文文档啥的。 |
![]() |
Packer.nvim |
![]() |
LSP |
![]() |
文件树 |
![]() |
Telescope快速查找文件 |
![]() |
Telescope快速查函数 |
![]() |
命令补全 |
![]() |
函数签名 |
![]() |
自动补全的时候也能看 |
![]() |
补全和提示效果 附Plugins列表
送礼物 还没有人送礼物,鼓励一下作者吧 |
![]() |
vim的美化主要是靠插件完成的,对新手来说,经常将各个插件的配置写到一个文件中,一坨陀的,既不美观,修改的时候也不方便,如果某天突然不想用这个插件了,就要去注释掉或者删掉一大片自己辛辛苦苦写的配置,费时费力。 我写了一个很简单的vim配置,每个插件都拥有自己单独的配置文件,我们只需要在配置文件中对相应的插件进行配置就可以了,不影响其他插件的配置。另外,我们拥有一个管理插件的文件,我们需要什么插件,就写在这里面,当vim启动的时候,我的配置会依据插件文件自动载入对应的插件配置。整个配置的结构简单明了。你甚至可以将插件的配置直接拿出来放到自己的vim配置文件中使用。 fgheng/vime?github.com/fgheng/vime |
![]() |
下面放几张图片吧 |
![]() |
|
![]() |
|
![]() |
|
![]() |
分割线,推荐下我最近写的一个linux下的键盘音效软件 ever:linux键盘音效 keysound21 赞同 · 19 评论文章 |
![]() |
keysound?github.com/fgheng/keysound 分割线,推荐下我最近写的一个winbar插件 ever:Neovim新特性winbar25 赞同 · 1 评论文章 |
![]() |
|
配来配去,最终成了vscode的模样,那为啥不直接用vscode呢? -------------------分割线 评论区好多来教我做人的,还有直接贴配置文件链接的 我就职于某 iot broker 公司研发岗,怎么可能不会用这些…再说了,配置、插件啥的,大都依赖网络下载吧,生产环境都不做网络隔离的么…… 开发就在vsc上做,上服务器就黑底白字vi(很多生产环境没有vim),花点时间出去玩,花点时间陪陪家人,剩下的交给插件市场点击即用不好么 现在甚至懒的开发环境都不配了,环境打一个docker vsc远程进去。当然了,这个docker镜像也是别人做的,我比较懒 |
vim无插件版小升级 除了vim自带的插件外,在不安装其他插件的情况下,想让vim变得更加符合自己的使用习惯,所以就最近就又重新整理了无插件配置的vimrc,需要使用这个配置的vim的时候,使用下方命令即可调用:
其中~/.vim/vimrc为无插件配置保存的位置。也可以修改环境变量,设置一个别名,方便调用,在Mac上,可以将下方内容添加到~/.zprofile中,保存退出后,重启终端就可以使用mvim这个别名来启动无插件配置的vim了,如果你已经装有macvim,建议使用别的名字来命名。
这次主要是添加了tab栏的优化,显示标签序号、设置颜色高亮、绑定快捷键方便切换等等 vimrc
效果 |
![]() |
vim+netrw 送礼物 还没有人送礼物,鼓励一下作者吧 |
这样说吧,你想让它多漂亮,它就可以多漂亮! Vim这么多年可以说是经久不衰,编辑器/IDE方面无论怎么更新换代,Vim一直都很坚挺。 我觉得这和它本身特点密不可分:跨平台兼容性、可定制性强、便携式配置和灵活的插件框架、高效的命令操作。 虽然前期学习会有一些吃力,但是一旦学会就可以成为效率奇高的生产力工具。 很多人觉得VS Code可以很漂亮、IDEA可以很漂亮,难道Vim就只能跟随Linux系统主题那么丑陋吗? 得益于Vim灵活的扩展性、可定制性,我们也可以给它配置很强大的功能和漂亮的主题,我之前写过一篇内容,详细的介绍了如何从零开始把Vim打造成一款高效的IDE,自动补全、主题、插件管理都有,喜欢琢磨的同学可以看一下: 不过,动不动都从零开始搭建显然是非常麻烦、低效的。 其实,现在有很多在原生Vim的基础上进行扩展打造的一些功能齐全的Vim编辑器,这些Vim编辑器开箱即用、配置简单,对初学者也很友好,我们可以像用VS Code、IDEA那样通过简单的配置就可以实现非常丰富的功能,例如,NeoVim、Kakoune、Helix等,这些都很不错。 但是,如果你既想拥有Vim的强大功能,有希望它能够简单易用、外观漂亮,我更加推荐SpaceVim,它一个社区驱动的Vim发行版。 SpaceVim开始于2016年12月,是wsdjeg的DotFiles仓库的一个衍生品,它具有很多亮点: 易用且完善的文档:用:h SpaceVim访问SpaceVim中的文档漂亮的用户界面记忆性的键绑定:自动显示键绑定指南快速启动降低RSI的风险。一致的体验:Vim和NeoVim之间的体验一致配置简单 下面,就来单独看一下它的用户界面到底有多漂亮: 欢迎界面 |
![]() |
工作界面 |
![]() |
多光标功能 |
|
![]() |
文件管理 |
![]() |
快速搜索 |
|
![]() |
键绑定描述 |
|
![]() |
上面展示了不同主题、不同功能,就可以看出SpaceVim有多漂亮了。 令人高兴的是,SpaceVim支持macOS、Linux、Windows不同平台,还可以运行在Docker里,下面简单一下如何使用。 安装 Linux&macOS
Windows
配置 SpaceVim 的默认配置文件是 ~/.SpaceVim.d/init.toml,在这里就可以配置外观主题、自动补全、语言支持等功能,这里不详细介绍,感兴趣的可以查看官方文档: 建议大家有空可以多浏览Github,有很多好用的开源免费工具。但是,目前Github上项目多如牛毛,而且刷榜现在也非常严重,想要找到优质的项目变得越来越难。这里,给大家推荐Github上一个非常不错的项目《DevWeekly》,这个项目每周都会精挑细选一些优质的开源项目,涵盖C++、JAVA、JavaScript、Python、Go等不同编程语言。此外,还有一些开源工具、优秀的技术文章,喜欢的同学可以Star并收藏一下,每周五会定期更新: 送礼物 还没有人送礼物,鼓励一下作者吧 |
配成vscode样子有啥意义?别tm逗了。 vim简单配合下fzf,功能就完爆vscode。 vscode现在的vim插件到今天连o功能的自动缩进都做不对, 函数参数的自动补全一堆历史毛病一直不fix,terminal也一堆毛病,越做还小毛病越多,原来能使的现在经常会扑街。 vim利用awk,sort,column,fzf 就可以轻松定制一个好用的符号系统, 一个快捷键+filter,就能找出一个陌生项目里的某个特定类的所有方法,或所有成员 |
![]() |
|
![]() |
一个快捷键,就能找出全局一共定义了哪些struct,哪些class,哪些typedef,哪些宏,哪些全局变量,而且全支持 fuzzy search |
![]() |
|
![]() |
一个快捷键就能看到文件的函数列表,还能看到函数是虚函,还是内联,private还是public,是不是static,属于哪个class,哪个ns。 |
![]() |
一个快捷键,就能把光标所在函数或者定义的变量或者宏,涉及的所有 call 调用全列出来 |
![]() |
你可以轻松通过一个模糊func name 去找到这个函数属于哪个class, 比如 load model 找到模型文件读取器,main找到函数入口, callback找到注册的钩子, normalize找到数学库。 你找到这个类,又想多了解一点, 再调出全局symbol,或者buf symbol,通过模糊查询,就能把这个类的所有方法、成员全列出来,源文件都可以不用打开,就能看到这个类的大致外貌。 还可以用这玩意轻松找出你自定义的快捷键,自定义的vimscript脚本函数,自定义的shell命令,甚至自己写的markdown或org笔记里的某个chapter或section |
![]() |
|
![]() |
2w以内的符号数目和函数数目都是秒开,几万行一个的源代码也是秒开,直接拿awk去怼都ok, 到了符号数5w个还往上,还想有秒开体验,也可以自己写后台cache数据和做filter喂给fzf。 配合vifm就可以弄个跑窗口里的文件管理器 |
![]() |
写代码支持实时语法错误检查,实时显示git的代码变动 |
![]() |
一键异步编译, 出错自动定位到错误代码错误行的具体错误符号: |
![]() |
|
![]() |
修改完毕没错误,编译完毕自动关闭之前错误列表。 也可以一键呼出浮窗,干点临时需要命令行的工作 |
![]() |
也可以一键呼出一个垂直命令行,以便更好观察输出或log |
![]() |
你也可以一键在角落呼出一个命令行浮窗,去跑监控或者sever |
![]() |
如果你比较变态,也可以俄罗斯套娃,terminal里再嵌套开个nvim来临时编辑下文件 |
![]() |
VSCode 的buf tag,你觉得够用还用的很开心,那就继续用呗。 |
![]() |
glew 这样的大文件,弹出个符号列表至少得花5-7秒,好在还cache了结果, 不过一旦你关了源文件,再打开,再等个5-7秒吧 |
![]() |
当遇到shellscript呢,这玩意啥都弹不出来 |
![]() |
觉得vsc非常满足你期望,就tm继续用呗。 辨不出个好坏优劣,也tm是种福气。 老子不知道一个个时间吝啬如金的优秀开发人才们既然对vim怨念这么深,来tm这种话题干嘛? 是tm学不会让你们自尊心难以接受吗? 宁可tmd当个垃圾人,说些几吧用都没有的垃圾话, 你tm有这功夫早tm能把vim学会了。 评论区有人坚持tag没用,靠vsc的search就挺好, 既然“挺好”,那就实践下, 我们在代码里来搜camera,游戏代码一定会有camera类, 那么vsc搜camera是这个结果: 2000个结果在119个文件之中,你就翻吧 |
![]() |
ok,我假定你知道应该搜 class camera, |
![]() |
你会发现啥玩意都搜不出来,为什么?因为类名叫 idCamera, 所以除非你搜 class idCamera, |
![]() |
这个时候结果才能搜出来。 而且你必须准确的搜“class idCamera”,换了“class camera”“camera class”,甚至中间两个空格的“class idCamera”,你都会啥都搜不出来。 当然你也可以用正则 class .*camera,这样你至少获得了一个少的多的列表,但依然不够直观,不过至少人肉能一个个查了。 |
![]() |
如果是tag系统,仅仅一个camera c| ,就找到了,就这么简单。 |
![]() |
哪怕你用 c| camera 也是一样的结果。 你用 c| cam era 甚至用 ca c| mera 一样能快速找出 class idCamera |
![]() |
再进一步,我发现idCamera只是个基类没功能,那找子类怎么办 搜 c| :camera,都出来了 |
![]() |
如果想要看子类 idCameraAnima的成员,搜m| cmeraanim. |
![]() |
在任何代码任何位置,你都能发起类似查询, 查出任何类的类关系,类成员,类函数,想细看就跳过去 如果这个case 换到ide或vcs,你能怎么做? 你得先辛辛苦苦找到 idCameraAnim ,然后扫源码,或者等待outline面板把你这个类的成员tree给一个个解析出来。 如果idCameraAnim这个符号,刚好出现在你编辑代码的区域,那还走运,光标移过去lsp跳转就行, 但如果 idCameraAnim 这个符号根本没出现在你编辑区,你突然想看,又忘了在哪个文件,那又变成一个搜索磨难。 tag保障了你search的所有东西绝对是一个语言符号,基于tag搜索的效率和稳定性都会很高。 而search只是一个字符串pattern匹配,根本不care是不是符号,且不说执行效率,仅仅就是输出结果的稳定性和简约都难以控制。 感谢 @林夕丶 告知,我一直不知道有c-t能查定位全局符号, 用了一下,正好对比 |
![]() |
|
![]() |
normalize是重载函数,需要接口信息,vsc只能闭着眼睛跳。 |
![]() |
|
![]() |
vsc 我用 fullname + classname 都定位不到操作符重载函数, vector2和vector4的operator +函数莫名其妙找不到。 |
![]() |
|
![]() |
过滤UI函数,vsc又是列了一堆我不care的。 |
![]() |
|
![]() |
fuzzy别指望了,少打一个字或打错一个字就飘了。 |
![]() |
|
![]() |
列出我程序中的所有main,vsc只有两个main被列出来,你都没法再继续narrow。 说vcs的全局符号勉强能用那都算过奖了。 上面对比的全局tag,其实是clangd插件的能力, 微软自己的cpp插件的tag能力倒比这强一点,至少符号还能给列全了,也可以exclude system symbol,不过速度、可配置性、fuzzy 就别指望和vim比了,各方面差太远。 微软cpp插件应该也是依赖ctags,这也能解释为什么vsc上的glsl插件的tag功能还必须依赖微软的cpp插件,因为在ctags的实现里,解析glsl符号可以用cuda的parser,而cuda的parser实际就是复用c的parser,所以才必须依赖微软cpptools里实现的symbol provider。 本来想看看cpptools实现是不是和我判断一样,结果发现这玩意只有ts源码开源,真正干活的cpptools和cpptools-srv都闭源。 然后翻了下vscode的代码,发现vscode就是把symbol能力作为了一个lsp的接口,于是提供workspace symbol的能力这就得靠各语言去把symbol provider自己去实现一遍, 所以vscode虽然有个ctrl-t的快捷键去query全局符号,可实际上底层根本就没有大一统的后台symbol/tag系统实现,只有一个空的query接口给你的扩展去实现。 这也解释了为啥连shellscript和glsl这些本来被ctags parser所覆盖的语言,即使在装了cpptools的情况下,也无法被解析。 所以你想要不同语言的全局符号系统,你只能指望那个语言的爱好者,哪天用爱发电给你填掉这个大坑,给你重新实现一遍WorkspaceSymbolProvider。 所以我负责任的说,以后你也不用指望vscode能有个通用且好用的全局符号系统。 比如遇到个go项目,上面的mess又tm重演一遍。 |
![]() |
|
![]() |
@soluty 1.首先你要学习韦易笑的vim 支持 ctags的文章,这个底下其他评论里有链接,你可以参考我用来生成tags的配置,确保能正确生成项目的tags文件。 2.你最好在linux底下来打通tags文件的生成,坑比较少,成功了可以再转移到 windows 下实现。 3.等你能正确生成tags文件,你要学会 fzf.vim的基本用法,就是如何把 cmd 塞给fzf,你要大概知道函数fzf#run() 和fzf#wrap()的用法,把fzf和fzf.vim这两个项目的README至少读一遍,可以先试试利用 ls 命令配合 fzf 实现个简单的 file selector功能。 4.获取全局tags的整体思路,就是利用tagfiles() 这个函数获得项目 tags的路径,然后通过组合 cat XXX.tags | awk | sort 这样的命令,把 tags 重新组织成你需要的格式化好的文本数据,然后把这个命令塞给 fzf.vim 的 fzf#wrap() 和 fzf#run() 的函数 5.弄懂生成的 tags 的文件结构,过滤出你关注的列,设置列和列之间的分隔符,和后面fzf指定的列分隔符要保持一致 6.我的全局 tags 的代码,你可以参考下,但应该很难直接成功套用上, 理解大致思路就够了,思路就是: (1)构建过滤和格式化 tags 文件的命令行,丢给fzf, (2)定制fzf的sink函数(下面的tag_sink()),来解析所选中的行中的文件名和行号,然后通过 goto_file() 函数做跳转。
7.query函数调用,你可以依赖 global -s -rx 通过gtags来获取,这和前面查询全局符号的原理一样,也可以通过lsp获取函数调用,结果比gtags更精确,coc直接有内建功能你可以直接用。 你也可以自己写命令去quary lsp 然后把命令塞给fzf,原理都类似,小坑比较多,但没啥难理解的。 |
大概就这样吧 |
![]() |
底部是集中的tmux(显示的窗口index和session name) |
![]() |
加入了outline |
![]() |
加入orgmode,可以快速管理待办事项 |
![]() |
markdown编辑 |
![]() |
补一个orgmode添加待办(可以具体查看某个日期哒待办),左边是使用org做的笔记 发一张在archlinx下的美图,从mac转linux了 |
![]() |
|
![]() |
|
![]() |
|
![]() |
目前我用vim 写 C++ 还是很舒服的 这是用到的插件:
上面的系统是ubuntu 22.04 gnome 。最近发现了一个 gnome插件 blur my shell 可以把 gnome 的窗口变成毛玻璃特效 虽然跟vim 配置没有关系, 但是vim 更好看了,而且也不会因为背景透明而分心了。 |
![]() |
vimtext 配置 @Adamlz
pdf查看器是okular,反向搜索功能需要在okular 中需要设置: 设置->配置okular->编辑器->自定义文本编辑器
在okular 的浏览模式下,用shift + 鼠标左键可以从pdf定位到tex,在tex中按 \lv 可以定位到pdf |
漂亮这东西非常主观且流于表面,选对一个主题占据了大部因素。此外,学会如何按照喜欢的模样去进行改造可能才是最重要的 (只要你有想法并且愿意花时间,相信肯定会学会如何定制),而不仅仅 “受制于人”。比如我不喜欢 vertical split 的分割线,所以就隐藏掉~. 喜欢 warning 与 error 简洁点,所以仅用前景色,这一点是我不喜欢现有流行 vim 主题的主要原因 ( 如何优雅地使用 Vim? - simple 的回答 - 知乎 )。 Vim 配置: Vim 主题和插件: |
![]() |
|
![]() |
|
![]() |
|
|
[收藏本文] 【下载本文】 |
上一篇文章 下一篇文章 查看所有文章 |
|
|
娱乐生活:
电影票房
娱乐圈
娱乐
弱智
火研
中华城市
印度
仙家
六爻
佛门
风水
古钱币交流专用
钓鱼
双色球
航空母舰
网球
乒乓球
中国女排
足球
nba
中超
跑步
象棋
体操
戒色
上海男科
80后
足球: 曼城 利物浦队 托特纳姆热刺 皇家马德里 尤文图斯 罗马 拉齐奥 米兰 里昂 巴黎圣日尔曼 曼联 |
网站联系: qq:121756557 email:121756557@qq.com 知识库 |