Solomon Xie

Results 723 comments of Solomon Xie

# Vim原生补全工具 OmniComplete 用了一天倒腾自动补全插件,实在是崩溃,但凡有点名气的都对vim本身的编译有很麻烦的要求。搜索过程中才发现Vim其实是自带补全功能的,称为`OmniComplete`。 输代码的过程中,直接按`Ctrl+X`然后再按`Ctrl+O`,就会弹出vim猜测的一系列补全内容。可以在菜单里按“上下键”选择,注意是方向上下键,不是JK键。 经过测试,原生支持很多种语言。 ![image](https://user-images.githubusercontent.com/14041622/35573497-42d7e634-0612-11e8-80de-75c35583f096.png)

# ❖ Vim键盘映射入门 > 之前一直在找方法将`Capslock`键映射为`Esc`键,这样vim中就不用每次跑很远去按Esc了。可惜MacOS最新版的系统都无法很好兼容市面上的键盘映射软件,就放弃了。 然后发现Vim其实本身就可以设置键盘映射,这样大好,原本对Key Mapping需求多的也只有Vim而已,其它地方不太需要这么乱七八糟的改键。 [参考:利器系列之 —— 编辑利器 Vim 之快捷键配置](http://blog.guorongfei.com/2015/09/03/vim-shortcut/) [参考:VIM键位映射总结](https://blog.csdn.net/jalused/article/details/42708429) ## 递归绑定和非递归绑定 Vim 的快捷键绑定分为递归和非递归两种,比如: ``` " 非递归方式 (No-re-map) 不会把a转嫁到c noremap a b noremap b c " 递归方式...

# `键` [参考。](http://learnvimscriptthehardway.stevelosh.com/chapters/06.html) Vim的默认Leader前缀是`\`键。 说白了,就是一个快捷命令的前缀。 一般比如cc,dd之类都被占用,映射起来不方便。所以加上`前缀`后,就可以追加各种自己喜欢的快捷命令了。

# Vim注释的方法 > Vim里面注释对初学者真是比较头疼的事情。需要先$跳到行头,i插入模式,输入注释,Esc退出插入模式。如果批量就更麻烦。下面是几种常用方法。 1. 原生方法一 > `Ctrl+v`进入Block选择,向下移动选择待注释行,`Shift+i`批量插入,输入注释符,按两次Esc退出,等几秒实现批量注释。 2. `.vimrc`配置文件法 在`.vimrc`中加入如下语句: ``` " Commenting blocks of code. autocmd FileType c,cpp,java,scala let b:comment_leader = '// ' autocmd FileType sh,ruby,python let b:comment_leader...

# Vim里Insert模式下不能按Backspace删除前面的内容 因为默认当前插入只能创建新内容,不允许改动别的东西。如果要变成Insert mode下随便编辑的模式,在`~/.vimrc`中加上: ``` set backspace=indent,eol,start ``` 或者更简单的`set backspace=2`,效果一样。

# Vim中Tab变Space等相关设置 Tab和Space之争和Vim于Emacs是一样等,我是Vim和Space派。但是我和大多数人一样喜欢按Tab出Space。 在`~/.vimrc`中设置如下,重启vim就会生效: ``` set autoindent "换行时自动缩排 同时对应的还有其它两种模式 smartindent, cindent set tabstop=4 "设定tab宽度为4个字符 set shiftwidth=4 "设定自动缩进为4个字符 set expandtab "用space替代tab的输入 取消的话 就用set noexpandtab "不用space替代tab的输入 retab "打开文件时自动转换所有tab为空格 ```

# Vim快捷命令 - 上下行调换位置:`ddp` - 前后字符调换位置:`xp` ### 删除命令 - 删至行尾:`d$` - 删至行头:`d0` - 此行以前所有行全部删除:`dgg` - 此行以前所有行全部删除:`dG` - 删除扩号之间内容:`di(` 注意,它非常只能,会识别到离自己最近的一组括号组 - 删除?号之间等内容:和引号之间一样,用`di`+符号,如单引号`di'`、双引号`di"`等。 ### 删除、复制引号,括号中的内容 参考[这篇文章](http://blog.csdn.net/YHM07/article/details/44522315)。 下面的符号可以是`' " [ ( { `等,注意都是左半边。...

# Vim Movement Commands ![image](https://user-images.githubusercontent.com/14041622/35904841-a4c7c586-0c1f-11e8-9ae0-374cb310541a.png)

# Vim产生的`.swp`文件 参考文章:[VIM不正常退出产生的swp文件](http://blog.csdn.net/pwiling/article/details/51830781) 常用关于swp文件的命令或`vimrc`配置: - 查看当前目录下的所有swp文件: `vim -r` - 恢复文件:`vim -r filename`,上次意外退出没有保存的修改,就会覆盖文件。 - 停止vim产生交换文件:在`~/.vimrc`中加入`set noswapfile` - 定时自动保存文件: ``` set updatetime=23000 " 设置每200个字符保存一次 set updatecount=400 " 设置每4秒保存一次 " set updatecount=0 "...

# ❖ Vim自动运行(或编译运行)文件 不像SublimeRepl需要安装插件,Vim原生支持直接运行python等代码。只要输入命令: `:!python %` 其它语言代码类似。 输入命令后,vim界面会暂时跳出编辑页面跳到终端页面显示执行过程,期间可以按任意键返回vim编辑页面。 输过一次后,就可以用`:!!`直接重复上次的命令,不用再输一遍命令。 ![screencast 2018-02-07 16-17-40](https://user-images.githubusercontent.com/14041622/35906002-00ab9e64-0c24-11e8-86c6-a72026149396.gif) 为了更方便,我们还可以设置`autocmd`让VIM根据不同的代码类型执行不同的编译命令。 以下案例中,我们设置`Ctrl-m`为执行触发键: ```vim "----{ " Get current filetype -> :echo &filetype or as variable &filetype " [ Builds...