一般ubuntu都会默认安装vim-tiny版本
在用户主目录下的 ~/.vimrc 文件中完成的,如果没有的话,需要自己新建一下:
cd ~
touch .vimrc
touch是在linux中比较常用的创建文件命令, 关于touch和mkdir的区别请自行百度
vim插件中最主要的就是vundle了,vundle用来管理vim的其它插件
项目地址https://github.com/VundleVim/Vundle.vim。
首先下载源码:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
如果~/.vim/bundle目录不存在,则新建目录:
cd ~
mkdir .vim
cd .vim
mkdir bundle
然后将下列配置放在.vimrc文件的开头:
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
如果想下载某个插件,比如自动缩进indentpython.vim插件,需要将
Plugin 'vim-scripts/indentpython.vim'
置于call vundle#begin()和call vundle#end()之间,保存配置后在vim中执行,输入linux命令vim,回车,然后输入:
:PluginInstall
即可以自动下载indentpython.vim插件了。
bundle可以管理下载几种不同的插件,方式如下:
github上的插件
Plugin 'tpope/vim-fugitive'
来自于http://vim-scripts.org/vim/scripts.html的插件
Plugin 'L9'
非github上的git插件
Plugin 'git://git.wincent.com/command-t.git'
本地插件
Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
" Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
有旧插件的情况下,下载新的插件并重命名以避免冲突
Plugin 'ascenator/L9', {'name': 'newL9'}
下载方式除了在vim中运行:PluginInstall外,还可以在命令行中运行:
vim +PluginInstall +qall
这部分也可参考以下链接:
https://www.cnblogs.com/linxiyue/p/7834817.html
简单的配置.vimrc:
set nocompatible "关闭与vi的兼容模式
set number "显示行号
set nowrap "不自动折行
set showmatch "显示匹配的括号
set scrolloff=3 "距离顶部和底部3行"
set encoding=utf-8 "编码
set fenc=utf-8 "编码
set mouse=a "启用鼠标
set hlsearch "搜索高亮
syntax on "语法高亮
为py文件添加下支持pep8风格的配置:
au BufNewFile,BufRead *.py
\ set tabstop=4 "tab宽度
\ set softtabstop=4
\ set shiftwidth=4
\ set textwidth=79 "行最大宽度
\ set expandtab "tab替换为空格键
\ set autoindent "自动缩进
\ set fileformat=unix "保存文件格式
更多建议参考以下文章:
https://blog.csdn.net/u013475704/article/details/52295157
非常好用的自动补全插件,就是比较重。
官网地址:http://valloric.github.io/YouCompleteMe/
github地址:https://github.com/Valloric/YouCompleteMe
YouCompleteMe安装后还需要手动编译,然后再在.vimrc中配置。
在ubuntu中使用,首先准备一些工具:
sudo apt-get install build-essential cmake
接下来这句话,ubuntu有可能会包包依赖的错:
sudo apt-get install python-dev python3-dev
下列软件包有未满足的依赖关系:
python-dev : 依赖: python (= 2.7.11-1) 但是 2.7.12-1~16.04 正要被安装
依赖: libpython-dev (= 2.7.11-1) 但是它将不会被安装
依赖: python2.7-dev (>= 2.7.11-1~) 但是它将不会被安装
python3-dev : 依赖: libpython3-dev (= 3.5.1-3) 但是它将不会被安装
依赖: python3.5-dev (>= 3.5.1-2~) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
然后发现不管怎么执行sudo apt命令都无法安装其中任意一个,因为包与包之间都有相互的依赖关系
博文推荐使用aptitude工具:
sudo apt-get install aptitude
sudo aptitude install python-dev
qly@qlyComputer:~$ sudo aptitude install python-dev
下列“新”软件包将被安装。
libexpat1-dev{ab} libpython-dev{a} libpython2.7-dev{ab} python-dev{b} python2.7-dev{ab}
0 个软件包被升级,新安装 5 个, 0 个将被删除, 同时 1 个将不升级。
需要获取 28.2 MB 的存档。 解包后将要使用 42.1 MB。
下列软件包存在未满足的依赖关系:
python2.7-dev : 依赖: python2.7 (= 2.7.11-7ubuntu1) 但是 2.7.12-1ubuntu0~16.04.3 已安装。
依赖: libpython2.7 (= 2.7.11-7ubuntu1) 但是 2.7.12-1ubuntu0~16.04.3 已安装。
libexpat1-dev : 依赖: libexpat1 (= 2.1.0-7) 但是 2.1.0-7ubuntu0.16.04.3 已安装。
libpython2.7-dev : 依赖: libpython2.7-stdlib (= 2.7.11-7ubuntu1) 但是 2.7.12-1ubuntu0~16.04.3 已安装。
依赖: libpython2.7 (= 2.7.11-7ubuntu1) 但是 2.7.12-1ubuntu0~16.04.3 已安装。
python-dev : 依赖: python (= 2.7.11-1) 但是 2.7.12-1~16.04 已安装。
下列动作将解决这些依赖关系:
保持 下列软件包于其当前版本:
1) libexpat1-dev [未安装的]
2) libpython-dev [未安装的]
3) libpython2.7-dev [未安装的]
4) python-dev [未安装的]
5) python2.7-dev [未安装的]
注意这时一定要选n!!不是y!!
是否接受该解决方案?[Y/n/q/?] n
下列动作将解决这些依赖关系:
删除 下列软件包:
1) libexpat1:i386
2) libfontconfig1:i386
3) libgd3:i386
4) libgl1-mesa-dri:i386
5) libgl1-mesa-glx:i386
6) libglu1-mesa:i386
7) libgphoto2-6:i386
8) libsane:i386
9) wine-devel
10) wine-devel-i386:i386
11) winehq-devel
降级 下列软件包:
12) libexpat1 [2.1.0-7ubuntu0.16.04.3 (now) -> 2.1.0-7 (xenial)]
13) libpython-stdlib [2.7.12-1~16.04 (now) -> 2.7.11-1 (xenial)]
14) libpython2.7 [2.7.12-1ubuntu0~16.04.3 (now) -> 2.7.11-7ubuntu1 (xenial)]
15) libpython2.7-minimal [2.7.12-1ubuntu0~16.04.3 (now) -> 2.7.11-7ubuntu1 (xenial)]
16) libpython2.7-stdlib [2.7.12-1ubuntu0~16.04.3 (now) -> 2.7.11-7ubuntu1 (xenial)]
17) python [2.7.12-1~16.04 (now) -> 2.7.11-1 (xenial)]
18) python-minimal [2.7.12-1~16.04 (now) -> 2.7.11-1 (xenial)]
19) python2.7 [2.7.12-1ubuntu0~16.04.3 (now) -> 2.7.11-7ubuntu1 (xenial)]
20) python2.7-minimal [2.7.12-1ubuntu0~16.04.3 (now) -> 2.7.11-7ubuntu1 (xenial)]
保留下列未解决的依赖关系:
21) wine-devel-i386:i386 推荐 libfontconfig1:i386 (>= 2.11.94)
是否接受该解决方案?[Y/n/q/?] y
下列软件包将被“降级”:
libexpat1 libpython-stdlib libpython2.7 libpython2.7-minimal libpython2.7-stdlib python python-minimal python2.7 python2.7-minimal
下列“新”软件包将被安装。
libexpat1-dev{a} libpython-dev{a} libpython2.7-dev{a} python-dev python2.7-dev{a}
下列软件包将被“删除”:
gstreamer1.0-plugins-base:i386{u} libasn1-8-heimdal:i386{u} libasound2:i386{u} libasound2-plugins:i386{u} libasyncns0:i386{u}
libavahi-client3:i386{u} libavahi-common-data:i386{u} libavahi-common3:i386{u} libbsd0:i386{u} libcapi20-3{u} libcapi20-3:i386{u}
此处省略n多行-------------
0 个软件包被升级,新安装 5 个, 9 个被降级, 140 个将被删除, 同时 1 个将不升级。
需要获取 33.2 MB 的存档。 解包后将释放 653 MB。
您要继续吗?[Y/n/?] y
读取: 1 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 python-minimal amd64 2.7.11-1 [28.2 kB]
读取: 2 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 python amd64 2.7.11-1 [137 kB]
此处省略n多行-------------
总算解决了python-dev的包依赖问题,接下来继续
sudo aptitude install python3-dev
qly@qlyComputer:~$ sudo aptitude install python3-dev
下列“新”软件包将被安装。
libpython3-dev{a} libpython3.5-dev{ab} python3-dev python3.5-dev{ab}
0 个软件包被升级,新安装 4 个, 0 个将被删除, 同时 1 个将不升级。
需要获取 37.7 MB 的存档。 解包后将要使用 53.9 MB。
下列软件包存在未满足的依赖关系:
python3.5-dev : 依赖: python3.5 (= 3.5.1-10) 但是 3.5.2-2ubuntu0~16.04.4 已安装。
依赖: libpython3.5 (= 3.5.1-10) 但是 3.5.2-2ubuntu0~16.04.4 已安装。
libpython3.5-dev : 依赖: libpython3.5-stdlib (= 3.5.1-10) 但是 3.5.2-2ubuntu0~16.04.4 已安装。
依赖: libpython3.5 (= 3.5.1-10) 但是 3.5.2-2ubuntu0~16.04.4 已安装。
下列动作将解决这些依赖关系:
保持 下列软件包于其当前版本:
1) libpython3-dev [未安装的]
2) libpython3.5-dev [未安装的]
3) python3-dev [未安装的]
4) python3.5-dev [未安装的]
是否接受该解决方案?[Y/n/q/?] n
下列动作将解决这些依赖关系:
降级 下列软件包:
1) libpython3.5 [3.5.2-2ubuntu0~16.04.4 (now) -> 3.5.1-10 (xenial)]
2) libpython3.5-minimal [3.5.2-2ubuntu0~16.04.4 (now) -> 3.5.1-10 (xenial)]
3) libpython3.5-stdlib [3.5.2-2ubuntu0~16.04.4 (now) -> 3.5.1-10 (xenial)]
4) python3.5 [3.5.2-2ubuntu0~16.04.4 (now) -> 3.5.1-10 (xenial)]
5) python3.5-minimal [3.5.2-2ubuntu0~16.04.4 (now) -> 3.5.1-10 (xenial)]
是否接受该解决方案?[Y/n/q/?] y
下列软件包将被“降级”:
libpython3.5 libpython3.5-minimal libpython3.5-stdlib python3.5
python3.5-minimal
下列“新”软件包将被安装。
libpython3-dev{a} libpython3.5-dev{a} python3-dev python3.5-dev{a}
0 个软件包被升级,新安装 4 个, 5 个被降级, 0 个将被删除, 同时 1 个将不升级。
需要获取 43.4 MB 的存档。 解包后将要使用 53.7 MB。
您要继续吗?[Y/n/?] y
读取: 1 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libpython3.5 amd64 3.5.1-10 [1,360 kB]
2% [1 libpython3.5 1,044 kB/1,360 kB 77%] 4,068 B/s 2小时 53分 3 2% [1 libpython3.5 1,05 2% [1 libpython3.5 1,0612% [1 libpython3.5 1,0622% [2% [1 libpython3.5 1,0622% [1 li2% [2% [1 libpython3.5 1,062 kB/1,362% [1 libpython3.5 1,062 kB/1,360 kB 78%] 3% [1 libpython3.5 1,156 kB/1,360 kB 85%] 3,853 B/s 3小时 2分 5 读取: 2 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 python3.5 amd64 3.5.1-10 [159 kB]
读取: 3 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libpython3.5-stdlib amd64 3.5.1-10 [2,117 kB]
读取: 4 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 python3.5-minimal amd64 3.5.1-10 [1,588 kB]
此处省略n多行-------------
关于包依赖报错可参考这个链接:
https://blog.csdn.net/u013182960/article/details/53431460
也有blog推荐使用Vundle的.vimrc配置文件来安装YCM
Plugin 'Valloric/YouCompleteMe'
我是手动下载安装的
#在主文件目录执行
git clone https://github.com/Valloric/YouCompleteMe.git
#手动下载完后检查仓库的完整性,切换到 YouCompleteMe 目录下,输入如下命令:
#进入到YCM文件目录
cd .vim/bundle/YoucomPleteMe
#执行命令
git submodule update --init --recursive
过程中如果网络不给力,推荐使用du命令观察文件大小
du -lhs .vim/bundle/YouComPleteMe
待接收对象克隆模块后,编译
参数 --clang-completer是为了加上C系列语言的自动补全,也可以不加:
如果不需要c-family的补全,可以去掉--clang-completer。如果需要c#的补全,请加上--omnisharp-completer
#在YCM目录执行
./install.py --clang-completer
把下列代码拷贝到.vimrc配置文件,
111 set runtimepath+=~/.vim/bundle/YouCompleteMe
112 let g:ycm_collect_identifiers_from_tags_files = 1 " 开启 YCM基于标签引擎
113 let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释与字符串中的内容也用于补全
114 let g:syntastic_ignore_files=[".*\.py$"]
115 let g:ycm_seed_identifiers_with_syntax = 1 " 语法关键字补全
116 let g:ycm_complete_in_comments = 1
117 let g:ycm_confirm_extra_conf = 0 "如果为1的话,会总是提示是否加载.ycm_extra_conf.py文件
118 let g:ycm_key_list_select_completion = ['', ''] " 映射按键,没有这个会拦截掉tab, 导致其他插件的tab不能用.
119 let g:ycm_key_list_previous_completion = ['', '']
120 let g:ycm_complete_in_comments = 1 " 在注释输入中也能补全
121 let g:ycm_complete_in_strings = 1 " 在字符串输入中也能补全
122 let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释和字符串中的文字也会被收入补全
123 let g:ycm_global_ycm_extra_conf ='~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py' "制定YCM目录
124 let g:ycm_show_diagnostics_ui = 0 " 禁用语法检查
125 inoremap pumvisible() ? "\" : "\" | "回车即选中当前项
126 let g:ycm_min_num_of_chars_for_completion = 2 "开始补全的字符数"
127
128 let g:ycm_python_binary_path = 'python' "jedi模块所在python解释器路径"
129 let g:ycm_seed_identifiers_with_syntax = 1 "开启使用语言的一些关键字查询"
130 let g:ycm_autoclose_preview_window_after_completion=1 "补全后自动关闭预览窗口"" 回车即选中当前项
131 nnoremap :YcmCompleter GoToDefinitionElseDeclaration| " 跳转到定义处
132 let g:ycm_min_num_of_chars_for_completion=2 "从第2个键入字符就开始罗列匹配项
133 let g:ycm_global_ycm_extra_conf ='~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py'
关键是配置文件
.ycm_extra_conf.py
,包含了补全的系统头文件和源文件出处
安装完毕后,修改.ycm_extra_conf.py文件
从example复制文件到ycm目录
要用cd命令检查是否有cpp目录,一般都是有的
cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/.vim/bundle/YouCompleteMe
#vim启动时,先寻找YCM目录的,然后再往上继续查找配置文件
cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/.vim/bundle/YouCompleteMe
注意这时要先修改配置文件,再复制到主目录
#若对linux命令不熟悉,可使用gedit编辑文件
gedit ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py
若.ycm_extra_conf.py文件没有以下代码,补上:
'-x',
'c++',
'-isystem',
'../BoostParts',
'-isystem',
'/usr/include',
'-isystem',
'/usr/lib',
'-isystem',
'/usr/local/include',
'-isystem',
'/usr/include/c++/5',
修改后,复制到主目录
cp ~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py ~/
下载nerdtree压缩包, http://www.vim.org/scripts/download_script.php?src_id=17123
在.vim下面创建doc和plugin文件夹
mkdir doc plugin
在存放压缩包的文件目录下解压缩
unzip nerdtree.zip
复制文件到doc和plugin
#在解压缩的文件目录里面
cp /doc/NERD_tree.txt ~/.vim/doc
cp /plugin/NER_tree.vim ~/.vim/plugin
初次使用
输入命令:vim,然后在vim中输入命令 :NERDTree 再按回车就可以看到安装成功
注意 :NERTree实在一般模式中的command最底部输入的命令
常用快捷键:
ctrl+w:切换编辑区域和文件结构区(即左侧树形结构)
q:在文件结构区直接按q可以推出NerdTree
简单辅助配置
#添加开关树形目录的快捷键
#Ctrl+n开启目录
map :NERDTreeToggle
#忽略pyc文件
let NERDTreeIgnore=['\~$','\.pyc$','\.swp$']
#为nerdtree添加git支持:
Plugin 'Xuyuanp/nerdtree-git-plugin'
#tab键
Plugin 'jistr/vim-nerdtree-tabs'
6 语法检查/配色插件
在 .vimrc文件的begin和end之间增加将要安装的插件
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
Plugin 'vim-scripts/indentpython.vim'
Plugin 'vim-syntastic/syntastic'
Plugin 'nvie/vim-flake8'
然后在vim中执行命令,直至左下角出现done就结束
:PluginInstall
配色的.vimrc文件配置:
solarized有dark和light两种配色
syntax enable
set background=light or dark
colorscheme solarized
#根据gui模式和终端模式进行切换
if has('gui_running')
set background=light
else
set background=dark
endif
另外一种配色Zenburn方案(我已安装了solarized就不安装这个了):
Plugin 'jnurmine/Zenburn'
if has('gui_running')
set background=dark
colorscheme solarized
else
colorscheme Zenburn
endif
#vim-powerline
#美化状态栏,可以显示当前的虚拟环境、Git分支、正在编辑的文件等信息
Plugin 'Lokaltog/vim-powerline'
#indentline
Plugin 'Yggdroot/indentLine'
#python是靠代码缩进来判断代码块的,缩进指示线还是很方便的。
#自动格式化工具
Plugin 'tell-k/vim-autopep8'
#自动补全括号和引号
Plugin 'jiangmiao/auto-pairs'
#搜索插件
Plugin 'kien/ctrlp.vim'
#git集成插件
Plugin 'tpope/vim-fugitive