闻心阁

一蓑烟雨看苍生,半壶浊酒笑红尘

使用 VS Code 的 Vim 模式

2019-04-01 约 1 分钟读完 搬砖秘籍
要看一款编辑器的成熟与流行程度,就看其是否支持Vim模式。 ———— 不是我说的。 目前来看,Vim 模式的确是编辑文字高效之选,很早之前 VS Code 流行的时候,其 Vim 模式的插件功能并不完善,所以试用了一下也就放弃了。但到 2019 年的今天来看。 VS Code 对 Vim 模式支持已经非常好了,对我来说,基本到了高效使用的地步了。因此,忍不住写文一篇,来记录这个过程。 安装插件 插件名:Vim 不用犹豫,装就是了。 配置 安装之后基本已经支持原生 Vim 的操作。 但是安装完成之后的操作是默认的,还有一些自定义的操作也要移植过来。自定义方法也很简单,在配置页面搜索 vim 这里面配置的是插件特定的选项,根据自己需要开启。 快捷键配置 自定义的快捷键可以在插件的 setting.json 中配置。 比如我常用的简单配置 "vim.normalModeKeyBindings": [ { "before": ["<leader>", "w"], "commands": [ "workbench.action.files.save" ] }, { "before": ["<leader>", "q"], "commands": [ "workbench.action.closeActiveEditor" ] }, { "before": ["H"], "commands": [ "cursorHome" ] }, { "before": ["L"], "commands": [ "cursorEnd" ] }, { "before": ["U"], "commands": [ "undo" ] }, ], 其他插件 Vim 中用几个杀手级插件,在这里也可以找到。比如:vim-easymotion、 surround. 继续阅读

Vim 配置 Catgs 用于前端开发

2019-01-19 约 1 分钟读完 搬砖秘籍
之前我一直以为ctags是使用Vim开发C++专用,竟然错过了这么强大的工具。看来凡事不能先入为主,以后要引以为戒。 安装 universal-ctags universal-ctags 是一个现代化的ctag实现,本文只介绍使用Vim的安装方法 brew install --HEAD universal-ctags/universal-ctags/universal-ctags 其他系统请参考项目主页:ctags 每次生成ctags文件都要手动run一次命令,这一点也不Vim,当然也有解决方法。 安装vim-gutentags vim-gutentags是一个用于自动生成tag文件的插件。使用vim-plug安装 Plug 'ludovicchabant/vim-gutentags' 配置 如果只是介绍安装方法,那就必要写这篇文章了,安装完成之后还是要针对前端开发的特点手动调教一下。首先我们在任何目录打开文件,都会在目录下生成ctags文件,这样的话对项目代码有入侵性,并不推荐,建议把tag文件写在特定的目录里。可以做如下设置: let g:gutentags_cache_dir = '~/.cachetags' 这样生成的tags文件会统一放在~/.cachetags目录下。另外默认生成的文件名叫tags,也可以根据个从喜好修改: let g:gutentags_ctags_tagfile = '.tags' 这样生成的文件是隐藏文件。另外一个很纠结的问题是有些文件我们并不想让他们生成tags文件,比如node_modules下文件,还有.git目录下的文件。这里有个取巧的方法是根据前文《Vim配置使用FZF》中的方法,把ctags获取文件列表的命令改成ripgrep的搜索,这样就可以自动忽略.gitignore下的文件。如下: let g:gutentags_file_list_command = 'rg --files' 另外有的文件我们也不想让其生成ctags文件,比如*.md、*.svg文件,可以通过universal-ctags的全局配置来配置,这里要注意的是universal-ctags默认的全局配置文件已经不是~/.ctags 和 ./.ctags,而是在 ~/.ctags.d/*.ctags 和 ./.ctags.d/*.ctags。比如我的全局配置文件放在~/.ctags.d/ignore.ctags。简要配置如下 : --exclude=node_modules --exclude=gulp --exclude=.git --exclude=*.md --exclude=*.svg 结合FZF 记得我们在文章《Vim配置使用FZF》中的介绍,FZF是支持ctags的,所以可以做个快捷键配置,如下: map <leader>t :Tags<CR> 这样就可以方便的使用ctrl-]和ctrl-o来进行tag跳转了。 最后分享我的Vim配置:sailor103/neovim-mac,欢迎fork,我感觉还挺好用的:-)

Vim配置使用FZF

2019-01-19 约 1 分钟读完 搬砖秘籍
使用Vim已经有了一段时间,虽然是和VS Code配合使用,不过还是有很多痛点。最近好不容易有了点时间,做了一个简单的折腾。今天的主题是使用FZF,这是目前来折腾的比较强大的一个插件了。 FZF是用来做什么的? fzf是一个用来做模糊搜索的强大工具,其实它不是专用于Vim的,但有人专门开发了一个插件fzf.vim,用于结合Vim与FZF,因此与搜索相关的内容都可以交给FZF了。 安装 有2种安装方法,一种是先在系统安装FZF再在Vim中安装fzf.vim插件。配置如下: Plug '/usr/local/opt/fzf' Plug 'junegunn/fzf.vim' 上面 /usr/local/opt/fzf 是使用Homebrew安装的就是这个目录,其他系统请配置成特定的目录。另外一种方式是本机不安装fzf,直接在Vim中安装。方法如下: Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } Plug 'junegunn/fzf.vim' PS:根据本人折腾下来的经验来看,使用Mac请选择第一种。直接使用Homebrew安装 brew install fzf 其他系统请自己斟酌。安装完成之后,让我们看看fzf.vim都支持哪些搜索。 默认支持的功能 :Files [PATH] //Files (similar to :FZF) :GFiles [OPTS] //Git files (git ls-files) :GFiles? //Git files (git status) :Buffers //Open buffers :Colors //Color schemes :Ag [PATTERN] //ag search result (ALT-A to select all, ALT-D to deselect all) :Rg [PATTERN] //rg search result (ALT-A to select all, ALT-D to deselect all) 继续阅读

使用vim-rooter让Vim支持工程目录

2019-01-19 约 1 分钟读完 搬砖秘籍
众所周知,Vim是一个高效的编辑工具,因为其专注编辑相关的工作,所以一些方面很难与IDE相对比。不过为了达到IDE的复杂功能,有很多人做了努力,开发了插件,虽不能与IDE相抗衡,但在某些情况下已经足够满足相关工作。 今天想和大家分享的是一个简单的小插件:vim-rooter,这个插件的功能也很简单,就是让你每次使用类似NerdTree这中插件的时候,自动把工作目录设置为当前的工程目录。 安装 使用vim-plug,目前本人使用的是这个。 Plug 'airblade/vim-rooter' 如果你没有特殊要求的话,使用默认配置就好。 原理 个人理解,其会查找你当前打开文件的目录,找最近一层的目录中带有.git、.svn(这个也可以自己设置),然后将其设置为Vim的工作目录。 上面的原理是我猜的。

重新开始学EMACS

2019-01-18 约 1 分钟读完 搬砖秘籍
之前一直使用Vim+VSCode做为我的开发编辑器,现在想换一下,立一个Flag。 Why Vim Vim的确是我目前用过的最好用的编辑器,没有之一,轻量效率高,并且它的键位你熟悉了之后,用其他的编辑器都会不习惯。目前我用过的所有的编辑器,很多都集成了Vim模式,但都没有Vim做的好。 Why VSCode 为什么又要结合VSCode呢?因为好用。太简单了,集成了超多的工具。并且超级多的插件可以一键安装,超级方便。这不就是一款好产品吗? Why EMACS 想学函数式编辑 Vim专注于文本编辑,但其扩展的成本太高了。 有了Spacemacs 一点想法 学习成本低的产品一定是效率高的吗?可以说是,也可以说不是。比如我目前正在用的五笔输入法。所以从Spacemacs入手,结合了Vim+Emacs,坚持一下,万一LISP可以给我惊喜。

Vim YouCompleteMe 使用整理

2018-05-03 约 1 分钟读完 搬砖秘籍
YouCompleteMe 是我使用 Vim 的必备插件,同时也是最难装的插件,没有之一。本文记录笔者在使用这个插件的一些心得,嗯,这个会持续更新的。 安装 在 Manjaro 上安装没有遇到过什么问题,基本按照文档一路来就好。 在 macOS 上因为要用到 python,并且 macOS 系统自带的 python 并没有安装 pip,所以要麻烦一些,解决方案看这里:macOS切换Python2和Python3的探索 ultisnips 冲突 Vim 的 ultisnips 插件也使用的是 tab 触发,这里会有冲突,解决方法,在 .vimrc 中加入下面的代码: let g:ycm_key_list_select_completion = ['<Down>'] let g:ycm_key_list_previous_completion = ['<Up>'] 把 ycm 的前一项和后一项绑定到小键盘上。 巧用 .tern-project 文件 最新版本的 YCM 已经兼容了 Tern,在我们开发 JavaScript 相关项目时,可以在根目录配置这个文件来增强这个插件的能力。 示例(React): { "ecmaVersion": 6, "libs": [ "browser" ], "loadEagerly":[ "node_modules/react-dom/dist/react-dom.js", "node_modules/react/dist/react.js", "node_modules/react-dom/dist/react-dom.js", "node_modules/react-dom/dist/react-dom-server.js" ], "dontLoad": [], "plugins": { "es_modules": {}, "node": {} } } 关于这个文件的详细写法可以参考这里:tststs/atom-ternjs