linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本

今天跟大家安利下自己一直在维护和使用的(Neo)Vim版本:

linrongbin16/lin.vim​github.com
linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第1张图片

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第2张图片

(Neo)Vim有很多优点:编辑速度快,扩展性和定制性强,而且自带光环。但对于新手来说,(Neo)Vim绝对算是非常不友好的一个文本编辑器:

  • 操作和键位难记,学习曲线陡峭
  • 需要额外学习VimL才能配置
  • 配置和安装插件费时费力

今天介绍的lin.vim是我在大学时期开始自己使用的配置(第一次把自己配置上传到github大概是2014年左右吧,太久了记不清了),经过长期的维护和开发把它逐步变成了一个开箱即用的(Neo)Vim版本。

lin.vim擅长:

  • 开箱即用,在UNIX/Linux/Mac/Windows下一键安装无需额外配置,所有平台的使用体验一致。
  • 同时支持Vim和Neovim。
  • 集成了大量常用插件,支持主流编程语言c/c++/python/lisp/scheme/haskell/sql/rust/golang/html/css/javascript/typescript等等,包括:自动补全、代码格式化、语法检查、文本查询、文件名模糊匹配查找、丰富的配色方案、图标和状态栏、文件管理器、Git/Svn支持、各种方便的快捷键。
  • 提供常用的命令行工具,帮你加速代码重构、文件(夹)操作、版本控制、压缩解压和ip地址、数字、时间相关的计算等等。
  • 追求性能,使用时几乎不卡顿,保证手速跟得上思路。为了保证编辑速度,我舍弃了一部分非常好看,但是会严重影响Vim性能的插件和配置。
  • 支持用户自定义配置。
  • 友好的说明文档。

lin.vim不擅长:

  • lin.vim不内置对java系语言(包括scala、groovy、clojure,以及hadoop、hive等)的自动补全等类IDE功能。其实从市场角度来说,java系用户数量非常庞大,但相应的java系工具链所涉及的软件繁多,配置也因人和项目而异,一套配置很难满足所有用户的需求,而且安装Jetbrains也更方便。当然如果你愿意在lin.vim上写java,也可以用lin.vim内置的coc.nvim插件平台安装扩展来支持java系语言。
  • lin.vim不提供类似IDE的编译、运行、调试功能。我希望lin.vim专注于编辑,而不是代替IDE,一个软件项目的配置因人和项目而异,固定的编译运行框架反而会把用户赶走。所以这件事留给用户自己做。

说了这么多优点,我们来一条一条的近距离看看lin.vim:

开箱即用

在UNIX/Linux/Mac系统中,lin.vim的安装依赖于git,额外的在Mac上需要homebrew:

&& 

它会自动将lin.vim配置用git clone到你本地的~/.vim目录下,然后安装Vim以及相关的依赖和配置。

在Windows上,lin.vim需要提前手动安装Visual Studio和Hack Nerd Font Mono - 这款字体支持漂亮的图标,效果如下:

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第3张图片

之后其他依赖都通过chocolatey来安装(需要以admin权限运行下面的命令):

$ choco install git python cmake vim llvm nodejs ag ripgrep universal-ctags
$ git clone https://github.com/linrongbin16/lin.vim $env:UserProfile.vim
$ cd $env:UserProfile.vim
$ .install.ps1

lin.vim在Windows上迁移到了PowerShell作为其内置命令环境,放弃了古老的cmd,使用chocolatey维护所有依赖。

目前我还无法PowerShell从github下载安装nerd-font的功能,所以目前字体还需要手动安装,等完成之后连字体也可以自动下载安装了。

当然你也可以选择别的字体,只要在~/.vim/user.vim中设置你想用的字体就可以生效。

UI界面

lin.vim的UI界面清晰易懂,并且非常美观,实际开发时lin.vim大概是这样子:

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第4张图片

左边侧栏是文件管理器,配合nerdtree的mc/mm/md等等命令可以创建文件、修改文件名、移动文件、删除文件等等,不同类型的文件还有相应的图标。

为了让开发工作不那么无聊,lin.vim内置了solarized、monokai、dracula、vscode-dark等15种流行配色方案,每次启动时都会随机选择一种,保证你不会腻:

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第5张图片
dracula配色

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第6张图片
monokai配色

不止如此,lin.vim的顶部和底部通过lightline和statusline来展示丰富的信息:包括文件类型、文件编码、光标位置、最近使用文件等等。

很多其他Vim集成版本都会有一键编译、运行、调试的功能。但我觉得Vim应当专注于编辑,而不是试图把所有功能都塞在里面。本来不同开发语言、甚至不同项目的配置都千差万别,强迫用户使用一套配置只会把用户赶走,所以编译和调试还是交给用户自己来吧。

自动补全、语法检查、代码格式化

Vim用户最头疼的问题就是自动补全了吧。

Vim补全插件的网上资料太少不知道怎么配置?用起来太卡太慢?在Visual Studio或Jetbrains里按一下"."符号,就能猜到你想些什么,花时间配置Vim是不是吃力不讨好?

不存在的。lin.vim的补全基于coc.nvim插件平台,让你写起代码如同丝滑感受,比任何IDE都不逊色:

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第7张图片
补全const关键字

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第8张图片
补全Position自定义类

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第9张图片
红色是语法检查错误信息

视频:

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第10张图片
https://www.zhihu.com/video/1251909913774505984

在上面的图和视频展示中可以看出lin.vim的补全速度是不亚于IDE的,非常顺滑。

通过gd(跳转到函数声明), gy(跳转到类型声明), gi(跳转到函数/类型实现), gr(查找所有函数/类型的引用并跳转), ctrl+o(返回之前位置)五个操作,让你在函数声明、定义和引用之间进行跳转/返回。

lin.vim还会在你编辑时默默的运行语法检查,在左侧用红色的>>>标记出有问题的代码。当光标移动到出错的位置,就显示红色的错误信息。

当你保存文件时lin.vim则会自动对当前文件进行代码格式化。默认c/c++使用的是clang-format,python使用的是black(因为black与autopep8和yapf相比速度更快)。

如果你想用lin.vim写java,可以直接用:CocInstall coc-java来安装java补全插件。

全局搜索和文件模糊查询

全局搜索和快速打开文件,是开发项目时的必备功能,lin.vim通过the_silver_searcher+ripgrep和LeaderF来实现这两个功能。

比如说需要在项目中搜索"AstBinaryExpression",只要在普通模式下键入:Ag AstBinaryExpression(或:Rg,功能基本相同),就会显示所有包含这个单词的文本:

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第11张图片
linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第12张图片
全局搜索https://www.zhihu.com/video/1252182288689147904

比如说需要快速打开文件"Ir.cpp", 只要在普通模式下按ctrl+p,在浮动弹窗中输入Ir.cpp,再按Enter就可以打开该文件了:

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第13张图片
linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第14张图片
快速打开文件https://www.zhihu.com/video/1252182338194661376

leaderf搜索时,输入小写字母也能匹配大写,而且你不必输入整个单词,只输入部分就可以,因为是fuzzy匹配。

文件管理器

lin.vim的文件管理器使用了nerdtree+airline,可以查看当前目录下所有文件,新建文件(ma),重命名/移动文件(mm),复制文件(mc),删除文件/文件夹(md)。

每打开一个文件,顶部会新增一个标签页,通过bn显示下一个标签,bp显示上一个标签,bd关闭标签。

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第15张图片

光标移动

这个段落并不会介绍怎么使用hjkl,我们聊一聊lin.vim中更效率的移动。

比如你需要跳转到某个段落"- gd in normal mode: go to definition.",这时按下s,左下角出现:

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第16张图片

再输入d,整个编辑栏的字符"d"都会变得不一样了,这时输入z就可以让光标移动过去了(不用再hjkl了):

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第17张图片

要大幅度的上下移动呢?可以用j(向下移动)或k(向上移动),再输入对应行的标记即可。

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第18张图片
linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第19张图片
快速移动光标https://www.zhihu.com/video/1252183438016278528

命令行工具

lin.vim提供的一系列命令行工具来辅助Vimer做开发,命名为vcmd。额外的,lin.vim会在UNIX/Linux/Mac上安装zsh和oh-my-zsh作为用户shell。

其实vcmd和lin.vim本身没有什么关系,可以单独作为一套工具。但在我个人平时的工作中,vcmd帮我完成了大量重复的工作,节约了不少时间。vcmd用python3实现,在Windows下也可以正常运行。

  • vcmd - vcmd帮助文档

vcmd只有一个功能就是展示一些帮助文档,告诉用户vcmd有哪些功能。

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第20张图片

vcmd中包含vrg用于全局搜索,vfile用户文件批处理,vgit是升级版Git命令,vip用于IP进行计算,vpack用户压缩/解压操作,vtime用于日期和时间计算,vgen用于生成一些用户配置。

这些命令具体如何使用,只要输入${vcmd} --help就会显示啦!

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第21张图片
  • vrg - 全局搜索

它提供了类似于IDE中全局搜索(ctrl+shift+f)的功能,让你在当前目录下递归的搜索任意文本,性能很高。

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第22张图片
用vrg搜索macoshttps://www.zhihu.com/video/1253062446707089408
  • vfile - 文件批处理。为了说明vfile的强大功能,我们以一个C++项目shepherd为例来进行说明:

1)批量删除某一种后缀的文件

比如我们想递归的删除shepherd目录下所有log文件时,只需要vfile -d log即可:

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第23张图片
删除所有log文件https://www.zhihu.com/video/1253063592363761664

2)批量替换某一种后缀的文件内容

在shepherd项目中,所有源码*.cpp文件的开头都有我的email邮箱 [email protected],但我有一天突然想把这些邮箱改为 [email protected]。这时只要用命令 vfile -r cpp gmail.com outlook.com 即可。

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第24张图片

3)修改文件编码(encoding)

跨平台工作时,文本文件的编码经常让人头痛。比如我在Windows下用记事本写了一些txt文件,发到Mac上打开全是乱码,这时如果一个一个去修改文件编码就很浪费时间。

vfile可以很方便的查询某类文件的编码(vfile -se ),还可以修改某类文件的编码(vfile -e )。vfile在修改文件编码的时候会自动的查询文件的原始编码(source encoding),然后将其转换为目标编码(target encoding)。

  • vgit - 傻瓜式交互git命令。

不得不说,我工作也三年多了,git命令却一直记不住。reset和revert参数怎么写?有多个remote repository时push/pull错repo怎么办?push/pull错branch怎么办?速度太慢怎么给git设置proxy?vgit可以帮所有同样有这些困扰的人解决这些问题。

1)vgit -pl是git pull的升级版命令。

我们开发时会遇到这种情况:remote有多个repository,在pull的时候选择错了remote repo,比如本来想从upstream repo pull,结果从origin repo pull了。

vgit -pl会自动检测是否有多个remote repo,并让你选择。

还有一种情况是你本地的分支是dev,但在pull的时候错误的选择了remote的master。

vgit -pl会检测本地所在的分支名,默认情况下它也会从remote repo中选择相同的分支去pull。当然也会跟你确认一下。

当vgit -pl确认了你的所有需求,才会真正执行git pull。

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第25张图片
https://www.zhihu.com/video/1253066466062303232

这里因为时间原因,这里只演示一下最简单情况下的vgit -pl交互方式。

2)vgit -ps是git push的升级版命令。

平时我们完成代码之后,一般要用git add、git commit和git push才能完成一次提交。vgit -ps会自动检测项目根目录,将整个项目中的所有改动都自动add到这次commit中,相当于执行了cd ${projectRoot}和git add -A .和git push。

和vgit -pl的设计思路类似,它也会交互式的询问你每一次push的细节,然后再执行:

linux文件明明存在却无法vim打开_可能是最适合新手的(Neo)Vim开箱即用版本_第26张图片
https://www.zhihu.com/video/1253067637959614464

vcmd中最常用的命令就是vrg、vfile、vgit这三个了,但其实vtime、vip、vpack、vgen等等命令也十分强大,套用python的一句名言就是:人生苦短,我用vcmd。由于时间关系,这里不再一条一条演示了,相信大家对lin.vim已经有一定的了解,还等什么呢?快安装试试吧!

你可能感兴趣的:(mac,vim,python3,mac,vim,with,python3,vim,nerdtree,标签)