上班族

 找回密码
 立即注册
查看: 1071|回复: 0

可能是最适合新手的(Neo)vim开箱即用发行版

[复制链接]

562

主题

720

帖子

2388

积分

金牌会员

Rank: 6Rank: 6

积分
2388
发表于 2021-7-28 20:13:51 | 显示全部楼层 |阅读模式
本帖最后由 云谷鹤峰 于 2021-10-5 18:21 编辑

lin.vim是什么?

lin.vim是一个旨在开箱即用、提供类IDE的编辑体验、但更加轻量级、满足主流开发者、容易上手也追求性能的(Neo)vim文本编辑器。
lin.vim专注于编辑,而不是尝试替代IDE,因此不会编译、打包、调试项目。lin.vim也不是一个vim的新手教程,需要用户具有一定的vim基础知识、了解shell、环境变量、sudo权限等知识然后进行使用。
相比于从零开始,lin.vim解决了以下问题:
  • 解决了用户对各种vim插件方案选择和搭配的困难,提供了一批满足主流用户开发需求的插件,并进行良好的配置,符合绝大部分用户的编辑需求。
  • 解决了多台机器、多种平台上重复安装和配置费时费力的困难,提供了多种平台上一键安装的傻瓜式操作。
  • 追求颜值。提供简洁、大方、漂亮的UI界面和丰富的配色方案、图标、各种信息栏等等。让用户开心愉快的工作。
  • 追求性能。不会为了大包大揽、炫酷花哨加入过多的插件。相反,在插件上的选择非常谨慎,倾向于轻量级,而不是一些可能存在严重性能问题的插件。
  • 简单易用。不把丰富的功能隐藏在源码中,提供全面的文档进行介绍,让用户心里有数。
  • 解决了日常的重复shell操作以及生僻命令不易记忆的困难。提供一组傻瓜式shell命令解决这些痛点。。
日常使用如图:
v2-0a01e51ad4aa9c9cd6fcca5d7208b7e5_720w.jpg

编写markdown
v2-7220e12775a37f883bc6d43d9d277734_720w.jpg

查找文件
v2-bdf18cde09a811020bcde81719cfe29c_720w.jpg

C 自动补全
v2-9e02ccc4e1537df5d283656bc49b990a_720w.jpg

光标快速移动
特性一览
  • 对多种操作系统提供一键安装脚本。目前支持Ubuntu、Fedora、Manjaro、MacOS、Windows这几个系统。
  • 同时支持Vim和Neovim,terminal模式和GUI模式。使用Hack Nerd Fonts字体来支持图标。
  • UI界面简洁美观,多种配色方案每次启动时随机选择,还有带有图标的文件浏览器,文件buffer栏和状态信息栏。
  • 追求性能,避免性能问题。
  • 依托coc.nvim这个language server框架,以及the_silver_searcherripgrepleaderF等一些工具和插件,提供类IDE体验的自动补全、静态语法检查、格式化、符号跳转、类和函数概览、全局文本搜索、文件查找等功能。支持主流编程语言。
  • 支持Markdown实时预览。
  • 支持Git、Svn等版本控制。
  • 支持快速光标移动、文本对齐、高亮搜索等一些常用编辑功能。
  • MacOS/Linux下安装和配置zsh作为用户shell。
  • 提供一组命令工具:文件操作命令vfile,文本文件编码命令vencode,git操作vgit,文本搜索操作vag,系统镜像配置vconf,IP地址计算命令vip,时间换算命令vtime,文件压缩解压命令vpack。
  • 友好的文档。
  • 个性化配置。
接下来近距离看看如何使用lin.vim。
下载和安装
MacOS/Linux上只要一条命令:
$ git clone https://github.com/linrongbin16/lin.vim ~/.vim && cd ~/.vim && install.sh
会将lin.vim clone到本地~/.vim目录下并执行安装脚本install.sh,自动完成以下几个步骤:
安装依赖软件
大部分UNIX/Linux系统有内置软件管理器(Ubuntu上的apt,Fedora上的dnf,Manjaro上的pacman,MacOS上的homebrew,Windows上推荐chocolatey,不论是手动安装还是用chocolatey这类包管理器,只要保证环境变量中有lin.vim需要的软件即可),lin.vim通过软件包管理器安装以下软件:
LLVM、cmake(支持C/C 编程)、python3和pip3、nodejs和npm、the_silver_searcher、ripgrep、ctags等命令行工具。
下载和安装GUI字体
Hack Nerd Font
这款字体可以支持左侧文件管理器中的图标:
v2-36ebc3cb4adc46f57dc113275fe4cbff_720w.jpg

用户还可以从https://github.com/ryanoasis/nerd-fonts下载和安装自己喜欢的字体。lin.vim默认使用了Hack Nerd Font字体,用户也可以更改为自己喜欢的字体。本文稍后会介绍如何在lin.vim中进行个性化配置来满足不同用户的喜好。
安装vim插件
lin.vim使用vim-plug作为插件管理器,可以多线程下载所有vim插件,如图:
v2-809beab14e69c4d69e8cc6cdf9224695_720w.jpg
初始化(Neo)vim配置
初始化vim配置~/.vimrc、neovim配置~/.config/nvim和~/.config/nvim/init.vim。Windows上的(Neo)vim配置在别的目录,但同样自动化。
初始化shell环境
在MacOS/Linux系统上安装zsh作为用户默认shell,生成环境变量脚本~/.linvimrc,并将该脚本加入~/.zshrc中。用户可以自由的修改~/.linvimrc来进行个性化配置。
首次运行初始化coc.nvim插件
以上步骤成功后,用户就可以第一次启动vim/gvim了。首次启动时coc.nvim框架还会安装一批插件,请耐心等待所有插件安装完成。
v2-a5cdb66ae82c39c92c86c3033c96cc9d_720w.jpg

至此lin.vim就安装成功了。lin.vim的特性依赖了很多新软件,所以推荐大家用最新版的操作系统和包管理器安装,而不要选择CentOS这种落后很多年的系统。
在Windows上一键安装有一定困难。chocolatey可以方便的安装除了Visual Studio之外的所有软件,但仍需要用户手动配置环境变量。lin.vim也暂时没能在Windows上自动安装Hack Nerd Font,目前只是帮用户自动下载该字体,用户需要手动安装。
lin.vim的README仔细讲解了在Windows上安装lin.vim的步骤。有任何问题都可以讨论。
需要注意:lin.vim的安装需要访问下面三个网站,请保证网络稳定:
UI界面配色方案
lin.vim包含了15种经典黑暗配色:
这里贴几张图:
v2-0c3f1cd865a76c08beaa2c3cce7c0dc0_720w.jpg

Solarized
v2-3633ce2cf15b1fe92ebcdf707963436e_720w.jpg

Neodark
v2-977a5dc0a5dabe5c74a3ebfc26dbdfb2_720w.jpg

Molokai
v2-71597eb3ee2271ecf3f069300639096a_720w.jpg

Gruvbox
v2-0855ab4369dfe04b1bee26dc8929e59c_720w.jpg

Dracula
v2-43a088864354461f57e4e5ef059a6b76_720w.jpg

Codedark
v2-190c08aa2d1e064eff1deea6ea3061eb_720w.jpg

Apprentice每次启动时都会随机挑选其中一种。lin.vim不仅支持GUI配色,也支持terminal配色,如图:
v2-ff60a4b706f90ebc90184c448c3c4448_720w.jpg

ITerm2上的jellybeans,由于terminal没有使用nerd fonts,无法支持图标,左侧出现了乱码
UI布局
v2-c5c3e4ab5967531e660fab399067df89_720w.jpg

lin.vim主要有2个窗口,包含4个部分:
  • 1)文本编辑区:显示当前打开的文件,正在进行编辑的区域。
  • 2)文件管理器:文件和文件夹目录。
  • 3)文件buffer栏:已经打开过的文件列表。
  • 4)状态信息栏:当前编辑状态、当前打开的文件的信息。
文件管理器
用Wh把光标从1区跳转到2区后,用户就可以操作文件目录树了。类似于文件浏览器Explorer、Finder的操作,用户可以ma创建文件(夹)、o打开文件、md删除文件(夹)、mc复制文件(夹)、mm移动文件(夹)。如图:
v2-f26581c30ccb6e365ba995c9ded498c7_720w.jpg
文件buffer栏
所有打开过的文件都会显示在3区buffer栏中。
v2-31c4d9d99ea520ad1289f6f91aa217d6_720w.jpg

在1区打开的文件会高亮显示通过以下操作来切换buffer:
  • <Leader>bn:跳到下一个buffer。
  • <Leader>bp:跳到上一个buffer。
  • <Leader>bd:关闭当前buffer。
状态栏
4区显示当前编辑文件的1)编辑模式、2)文件名、3)字符集、4)文件类型、5)光标所在位置的字符unicode、6)光标位置,如图:
v2-8bffe3501d5720723e65d86443ffa20a_720w.jpg
类IDE的编辑体验

以C 为例,Visual Studio和Jetbrains CLion主要帮我们实现了以下功能:
  • 自动补全:猜测用户想要写的内容,比如wh->while,类.->类中的成员变量/成员函数,#include->头文件名等等。
  • 源码静态分析:实时找出代码错误,而不是在编译/运行阶段才发现。
  • 符号查询和跳转:从变量、函数的调用位置跳转到它的定义/实现位置。
  • 格式化:美化源文件的缩进、空格、换行等样式。
  • 项目维度的文件管理:项目中的文件管理。
  • 全局文件查找:根据文件名快速找到和打开文件。
  • 全局文本搜索/修改:在整个项目中搜索和修改文本。
  • 编译/打包/调试:lin.vim不支持这部分功能。
随着Language Server的发展,类IDE的编辑体验在vim上不再是一件奢侈的事情。lin.vim使用coc.nvim框架和一整套工具链对C 项目进行语义分析,提供上述功能(除了编译/打包/调试)。这套工具链包括:LLVM中的clang、clang 、clangd、clang-format,cmake,符号索引ctags、文本搜索ag/rg、文件查找LeaderF等等。
Language Server
编辑模式(insert mode)会自动触发coc.nvim的代码补全,弹出浮动窗口展示clangd猜测的候选项。以下操作在补全列表里上下移动进行选择:
  • tab和shift-tab
  • ctrl-n和ctrl-p
  • down和up
当浮动窗口弹出时,默认是没有选中任何候选项的,这时可以直接按回车enter选中第一个候选项。
实际开发时,需要对CMakeLists.txt生成compile_commands.json,来告诉clangd这个项目中有哪些源文件,使用了哪些第三方头文件和库文件,从而得到完整的补全和错误分析支持。
每次保存文件时lin.vim还会格式化当前文件。
除了C/C ,coc.nvim还支持Python/Java/Kotlin/Scala/Rust/Golang/HTML/CSS/JavaScript/TypeScript/Json/SQL等等一大票编程语言。还支持yank列表、git、语法高亮、代码片、coc.nvim扩展市场、leetcode等等跟文本编辑相关的功能。
lin.vim默认只安装了C/C /Python/Json/Markdown/HTML等基本功能,用户可以自行安装其他扩展来满足自己的需求。coc.nvim的扩展列表:
https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions​github.comTags支持
有时Language Server因为一些原因(Windows下支持不完整、项目本身很多bug导致Language Server无法解析等等)失效,这时lin.vim也使用ctags作为补充。
用户编辑时,lin.vim会默默收集源文件中的符号,并在~/.cache/tags下生成符号数据文件,这些数据会作为coc.nvim补全的额外数据来源。
用户可以直接按F2查看当前文件的符号列表。如图:
v2-6d262b50e5911f3ad260c3d906d269c9_720w.jpg

按F6打开/关闭右侧符号列表
全局搜索
快速注释(preservim/nerdcommenter)
  • 普通模式:<Leader>c<Space>可以注释/反注释光标所在行的代码
  • Visual(选中)模式:<Leader>c<Space>可以注释/反注释所有当前被选中的代码
Git支持(mhinz/vim-signify自动检测当前文件的修改,并在编辑窗口的左侧进行标记,如图:
v2-fc46de3aeaa21d4fdd8ffaa57782705e_720w.jpg

绿色 表示新增,黄色!表示修改,红色_数字表示删除
括号自动补全
jiangmiao/auto-pairs当键入左括号( [ {时,lin.vim会自动添加右括号) ] },并且将光标放置在左右括号中间,等待你填充括号中的内容。
预览Markdown生成的文档(iamcco/markdown-preview.nvim v2-b9e2916d55f177c89fd3a22089fe5b83_720w.jpg

预览Markdown生成的文档按F7即可在浏览器中预览markdown的最终效果,而且页面会跟随vim光标上下滚动。
光标快速移动(easymotion/vim-easymotion通过以下操作快速移动光标:
  • <leader><leader>f {char}: 移动到单个字符char的位置
  • <leader>s {char}{char}: 移动到两个连续字符char-char的位置
  • <leader><leader>w: 移动到某个单词
  • <leader><leader>L: 移动到某一行
  • <leader><leader>j: 移动到光标下面的某一行
  • <leader><leader>k: 移动到光标上面的某一行
如图:
v2-e11e4a90b76b2425df8d0e87bd2b6ce1_720w.jpg

普通模式下光标在第29行
v2-73bc2824b06c24cf64cff07e755ba6f2_720w.jpg

输入leader leader f s后进入跳转模式,这时输入红色的字符即可跳到对应位置
v2-f9350a454014339008c6cb6667fb09d3_720w.jpg

输入leader leader L后进入跳转模式,这时输入红色的字符即可跳到对应位置
快速增加/取消文本两侧的双引号、单引号、标签等(tpope/vim-surround通过以下操作增加/取消:
  • cs"' : "Hello World!" -> 'Hello World!'
  • cs'<q> : 'Hello World!' -> <q>Hello World</q>
更多操作直接查看该插件主页。
前端增强功能(andymass/vim-matchup和alvan/vim-closetag和mattn/emmet-vim前端增强功能主要包括:
  • 像括号() [] {}一样,通过%可以在html、xml标签之间进行跳转。
  • 当输入html、xml的起始标签,自动补全关闭标签。比如输入<table>后,自动帮你输入</table>并把光标放置在两个标签中间,等待填充内容。
  • emmet-vim插件提供了一组快捷操作帮助用户快速编辑html、xml。请直接查看该插件主页。
个性化和功能扩展

安装lin.vim之后,会生成3个配置文件:
  • ~/.vim/user.vim:vim配置
  • ~/.vim/coc-settings.json:coc.nvim配置
  • MacOS/Linux上会额外安装zsh并生成~/.linvimrc:zsh配置
lin.vim会帮用户默认配置一些行为,用户可以根据自己喜好进行修改:
  • 快捷键绑定:F1-F8热键、buffer跳转等。
  • 常见的文件类型映射:hql -> sql,md -> markdown,hs -> haskell,*makefile -> make,scm -> lisp等。
  • GUI字体配置:默认使用Hack Nerd Font。
  • GUI窗口大小配置:默认最大化窗口。
  • 文件浏览器nerdtree配置:默认宽度40,启动vim时自动打开。
  • coc.nvim扩展列表。
  • zsh prompt样式:默认包含用户名、机器名、当前日期时间、工作目录。如图:
v2-dd3a4feaca48def383665bea0b68fa7b_720w.jpg

如果用户想要增加vim插件,则需要自己编辑~/.vim/setting-vim/vim-plug.vim文件。如果有更多定制化需求,就需要真正修改~/.vim中的vimL代码了。
Shell命令行工具集vcmd

大部分Vimer因为不使用IDE,很多操作需要在shell上完成。大量重复的shell操作和一些生僻功能很容易浪费用户的时间。因此lin.vim额外提供了一组shell命令行工具集vcmd。
从某个角度来说,vcmd和vim是完全独立的两个模块,相互没有关系。但从我个人的日常使用经验来说,使用Shell对一个Vimer来说是大概率事件,所以把vcmd直接集成在lin.vim中。这也是为什么lin.vim直接为用户安装了zsh。
vcmd所有命令都提供了良好的help文档,只需{vcmd} -h/--help就可以查看:
v2-e27d7f23666bae9a7d77512812efa1c9_720w.jpg

vag -hvcmd用Python3实现,因此也是跨平台的。它包括以下命令:
l 和 ll
ls增强版,其中l = "ls -lh",不显示隐藏文件(夹),ll = "ls -lah",显示隐藏文件(夹)。
文本搜索命令vag
用the silver searcher (ag)实现,但额外的可以帮用户配置.ignore文件。vag在搜索过程中会额外的考虑.ignore中的文件类型,并忽略这些文件类型。
配置命令vconf
  • 为clangd生成compile_commands.json文件,若CMakeLists.txt不可用或者Windows上的cmake无法生成compile_commands.json文件,则生成compile_flags.txt文件。自动包含C/C 开发的头文件路径。
  • 自动生成sshkey。
  • 为homebrew、python-pip、ubuntu、debian、manjaro、fedora配置国内源。
编码/解码命令vencode
  • 用base64、url算法对字符串进行编码、解码。
文件(夹)操作命令vfile
  • 批量删除某个类型(特定后缀)的文件
  • 批量替换某个类型(特定后缀)的文件内容
  • 列出某个类型(特定后缀)的所有文件
  • 批量查看某个类型(特定后缀)的文件的字符集。
  • 批量转换某个类型(特定后缀)的文件的字符集,比如将所有txt文件从GBK字符集转换为UTF8字符集。
交互式/傻瓜式git命令vgit
  • 创建、查看、切换git branch
  • git pull、push
  • 配置、查看git proxy代理
IP地址计算命令vip
  • 校验ip地址是否正确,或某个整数是否是一个合法的ip地址。同时支持IPv4和IPv6。
压缩解压命令vpack
  • 将文件(夹)压缩为.tar.gz、.tgz、.tar.bz2、.zip、.7z。
  • 将上面几种格式的压缩包解压为原始文件(夹)。
时间计算命令vtime
  • 获取当前时间(同时支持本地时区和UTC)的时间戳,类似于:1608110863.764814。
  • 获取当前时间(同时支持本地时区和UTC)的字符串时间,类似于:2020-12-25 12:27:36.821。
  • 可以将字符串时间和数字时间戳相互转换。
限制和注意事项
  • 目前只支持5种操作系统:Windows10,MacOSX,Manjaro,Ubuntu,Fedora。目前已经在MacOS Catalina 10.15.7、Windows 10、Ubuntu 20.04 LTS、Fedora Workstation 32、Manjaro 20.2上测试成功。Ubuntu 16.04 LTS、CentOS Linux 8上测试失败。
  • 只支持Python3,不支持Python2。
  • install.sh脚本会自动用系统的包管理器安装依赖软件,这可能会和您已经安装的软件相冲突。
  • 安装过程中需要访问githubraw.githubusercontent.comchocolatey这三个网站,请确保网络正常。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|shangbanzu.xyz

GMT+8, 2025-5-8 03:02 , Processed in 0.070885 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表