传说中的Vim一直有着不可磨灭的神话, 为了追求效率, 嵌入式开发应该转入LInux下, 首先当然是学会使用强大的Vim了~
1. vi与vim
2. vim使用
在开始学习vim使用之前,先了解一下vim的三种工作模式:
- 命令模式
vim默认打开就处于命令模式,在此模式之下可以简单粗暴的使用vim快捷键操作文本,比如光标移动,文本复制、移动、粘贴、选择、替换等等; - 插入模式
在命令模式下按i
进入插入模式,可以和正常编辑器一样输入文本; - 末行模式
在命令模式下输入:
进入末行模式,在此模式下可以使用vim命令;
在末行模式和插入模式下,使用ESC
退回到命令模式。
vim给我们提供了一个很好的30min教程, 在终端中输入vimtutor
进入教程, 这个教程囊括了几乎常用所有的vim操作,认真的跟完这个教程自然就会了~
vim之所以强大,不仅仅因为它有效的工作模式和操作命令,更因为万千网友为它提供的各种插件,让它绽放光彩。
3. vim基本启动配置
vim中很多特性默认都不开启(比如显示行号),但是这些设置可以在末行模式里用set nu
命令开启,不方便,所以vim提供了一个很方便的方法——创建启动脚本文件vimrc
,如果这个配置对于当前用户使用,可以使用vim ~/.vimrc
创建,然后在其中添加在vim启动前需要执行的命令即可,也就是需要的vim设置。
这里是我的一些配置,可以参考:
"author@ mculover666
"bash option
"--------------------------
"开启显示行号
set nu
"设置F1显示/不显示行号
"不与vi兼容
set nocompatible
"打开语法高亮
syntax on
"底部显示当前模式
set showmode
"命令模式下显示输入命令
set showcmd
"支持使用鼠标
set mouse=a
"256色显示
set t_Co=256
"使用utf-8编码
set encoding=utf-8
"开启文件类型检查,并载入对应缩进规则
filetype indent on
"光标当前所在行高亮
set cursorline
"自动高亮另一个匹配的括号
set showmatch
"输入搜索模式时,每输入一个字符,就自动跳到第一个匹配的结果
set incsearch
"根据编辑文件自动切换工作目录
set autochdir
"开启文件监视,外部改变后提示
set autoread
"搜索时,高亮显示匹配结果
set hlsearch
"回车后,下一行的缩进和上一行一样
set autoindent
"tab缩进值为4
set tabstop=4
"所有tab缩进值
set shiftwidth=4
"防止不同编译器tab值不同,将tab自动转为空格
set expandtab
"tab转为多少个空格
set softtabstop=4
"bash option end
"--------------------------
4. vim插件配置
4.1.准备工作
- vim版本 > 7.4
- 安装了
git
4.2.vim插件管理器Vundle
vundle是vim的一个插件器,可以在配置文件vimrc中直接管理插件,方便实用~
- 使用git从github上下载vundle,放到vim的bundle路径下:
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
- 在
~/.vimrc
中添加配置:
"vundle options
"-------------------------------------
"关闭文件类型检查
filetype off
"启用自动补全
filetype plugin indent on
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
call vundle#end()
"vundle option end
"--------------------------------------
- 运行vim,在末行模式下输入即可
PluginInstall
- vundle安装成功,安装插件时只需要在配置文件
vimrc
中添加Plugin <插件名>
,然后运行PluginInstall
即可安装插件。
4.3.目录树插件 —— NERDTree
在vundle的配置中增加一行:
Plugin 'scrooloose/nerdtree'
然后打开vim,在末行模式输入"PluginInstall"即可安装~安装成功后对nerdtree插件进行一些配置,便于更好的使用:
" NERDTree config
" open a NERDTree automatically when vim starts up
"autocmd vimenter * NERDTree
"open a NERDTree automatically when vim starts up if no files were specified
"autocmd StdinReadPre * let s:std_in=1
"autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif
"open NERDTree automatically when vim starts up on opening a directory
"autocmd StdinReadPre * let s:std_in=1
"autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe'NERDTree' argv()[0] | wincmd p | ene | endif
"map F2 to open NERDTree
map <F2> :NERDTreeToggle<CR>
"close vim if the only window left open is a NERDTree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
4.4.自动提示插件 —— YouCompleteMe
4.4.1.准备工作
- 查询vim版本
在vim的末行模式输入:version
:
- 主版本需要大于7.4
- 主板本如果等于7.4,
Include patches
的最后一个数字需要为1578或更高
- 查询vim支持的python版本
- 输入
echo has('python')
,如果输出为1,后面使用python2版本 - 输入
echo has('python3')
,如果输出为1,后面使用python3版本
这里我使用的是python3~
4.4.2.在vundle中安装YouCompleteMe
和安装别的插件一样,在~/.vimrc
中添加如下一行:
Plugin 'Valloric/YouCompleteMe'
然后同样的打开vim,这个插件下载时间比较久(2h),需要耐心等待。等待YouCompleteMe安装完成之后,开始安装Clang+LLVM~
4.4.3.安装Clang+LLVM
- 首先去LLVM官网,我们使用添加软件源在线安装的方法,点击左侧边栏中最新版本下载链接中的APT Packages(最低是LLVM 7.0.0):
然后选择自己系统对应的软件源,这里我使用的是Ubuntu 16.04:
- 将上述查找到的软件源配置复制,添加到
/etc/apt/source.list
文件中,然后使用apt update
更新软件源; - 执行检索存档签名
wget -O - http://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
- 安装clang, lld, lldb(7版本)
sudo apt-get install clang-6.0 lldb-6.0
4.4.4.接下来编译ycm_core库
- 安装cmake
sudo apt-get install cmake
- 安装python-dev
sudo apt-get install python-dev python3-dev
- 建立编译目录,生成makefile
cd ~/.vim/bundle/YouCompleteMe/
mkdir ycm_build
cd ycm_build
cmake -G "Unix Makefiles" -DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
- 编译ycm_core库
cmake --build . --target ycm_core --config Release
- 构建正则表达式模块,以便使用正则表达式改进Unicode支持,和编译
ycm_core
库类似
cd ../
mkdir regex_build
cd regex_build
cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/cregex
cmake --build . --target _regex --config Release
4.4.5.配置
- 复制.ycm_extra_conf.py文件:
cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/
- 然后对启动配置文件进行配置
vim ~/.vimrc
let g:ycm_server_python_interpreter='/usr/bin/python'
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
这样YouCompleteMe
插件就安装配置成功了,编写一个test.c测试一下: