forked from Wangzhike/VimConfigScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfigVim.sh
More file actions
executable file
·218 lines (204 loc) · 7.86 KB
/
configVim.sh
File metadata and controls
executable file
·218 lines (204 loc) · 7.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#!/bin/bash
# 判断Vim的版本是不是basic,如果是,返回0;否则返回1
function checkVimVersion() {
# 先获取vim可执行命令的位置
vimLoc=$(which vim || which vi)
# 如果该位置的文件是链接文件
while [ -L $vimLoc ]; do
# 通过ls -l命令以及sed命令取出该链接文件对应的文件
vimLoc=$(ls -l $vimLoc | sed -r 's/.+-> ([^ ]+).*/\1/')
done
# 最终得到vim命令对应的可执行文件对应的位置,
# 通过sed命令取出vim对应的版本,比如: tiny, basic等
vimVersion=$(echo $vimLoc | sed -r 's/.+vim\.(.+)/\1/')
echo -e "\033[32m你系统VIM的版本为:$vimVersion\033[0m"
if [ $vimVersion = basic ]; then
return 0
else
return 1
fi
}
# vim基本配置以及vundle插件初始化
function configVimBasic() {
if checkVimVersion; then
echo -e "\033[32m无需升级VIM\033[0m"
else
echo -e "\033[32m升级VIM\033[0m"
# 卸载vim-tiny版本
sudo apt-get remove vim-tiny vim-commoin
# 安装full版vim
sudo apt-get install vim
fi
# 安装Git
sudo apt-get install git
# 判断vundle插件是否已经安装
if [ -d ~/.vim/bundle/Vundle.vim ]; then
echo -e "\033[32m你已经安装了Vundle插件管理工具\033[0m"
else
echo -e "\033[32m安装Vundle插件管理工具\033[0m"
# 下载vundle插件
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
fi
# 在$HOME目录下新建.vimrc配置文件
#touch $HOME/.vimrc
echo -e "\033[32m配置用户的Vim配置文件.vimrc\033[0m"
# 将vim基本配置以及vundle插件的初始化代码插入到.vimrc
cat ./vimBasicConf.txt > $HOME/.vimrc
}
# 安装,编译,配置自动补全插件YouCompleteMe
function configYouCompleteMe() {
echo -e"\033[32m安装自动补全插件YouCompleteMe\033[0m"
# 获取安装Github插件代码的结束位置,并在该位置之前插入安装
# YouCompleteMe插件的代码
sed -i "/^\" Github Plugin End/i\Plugin 'Valloric/YouCompleteMe'" $HOME/.vimrc
# 在.vimrc文件尾部追加该插件的配置
cat ./YouCompleteMe_conf.txt >> $HOME/.vimrc
# vim上的自动补全插件,注意该插件需要手动编译!!!
# 如果使用Vundle更新了YouCompleteMe,也需要重新编译!!!
sudo apt-get install build-essential cmake
sudo apt-get install python-dev python3-dev
}
# 在安装完YouCompleteMe之后编译并修改配置文件
function makeYouCompleteMe() {
echo -e "\033[32m编译自动补全插件YouCompleteMe\033[0m"
cd ~/.vim/bundle/YouCompleteMe
./install.py --all
echo -e "\033[32m编译完成!\033[0m"
# 注释掉.ycm_extra_conf.py中的选项
cp ./third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/.ycm_extra_conf.py
num=$(sed -n "/final_flags.remove/=" ~/.ycm_extra_conf.py)
sed -i "$(expr $num - 1),$(expr $num + 2) s/^/#/" ~/.ycm_extra_conf.py
# 添加库所在的flags
num=$(sed -n "/^]/=" ~/.ycm_extra_conf.py)
gcc_version=$(sed -r "s/.+gcc version ([0-9\.]+).+/\1/" /proc/version)
sed -i "$num i# add by qiuyu\n'-isystem',\n'/usr/include',\n'-isystem',\n'/usr/include/x86_64-linux-gnu',\n'-isystem',\n'/usr/include/c++/$gcc_version',\n'-isystem',\n'/usr/include/c++/$gcc_version/backward',\n'-isystem',\n'/usr/include/x86_64-linux-gnu/c++/$gcc_version',\n'-isystem',\n'/usr/local/include'," ~/.ycm_extra_conf.py
cd -
}
# 安装,配置语法检查插件syntastic
function configSyntastic() {
echo -e "\033[32m安装语法检查插件syntastic\033[0m"
# 获取安装Github插件代码的结束位置,并在该位置之前插入安装
# syntastic插件的代码
sed -i "/^\" Github Plugin End/i\Plugin 'vim-syntastic/syntastic'" $HOME/.vimrc
# 在.vimrc文件尾部追加该插件的配置
cat ./Syntastic_conf.txt >> $HOME/.vimrc
}
# 安装,配置代码折叠插件SimpylFold
function configSimpylFold() {
echo -e "\033[32m安装代码折叠插件SimpylFold\033[0m"
# 获取安装Github插件代码的结束位置,并在该位置之前插入安装
# SimpylFold插件的代码
sed -i "/^\" Github Plugin End/i\Plugin 'tmhedberg/SimpylFold'" $HOME/.vimrc
# 在.vimrc文件尾部追加该插件的配置
cat ./SimpylFold_conf.txt >> $HOME/.vimrc
}
# 安装,配置显示文件树/文件目录插件NERDTree
function configNERDTree() {
echo -e "\033[32m安装显示文件树/文件目录插件NERDTree\033[0m"
# 获取安装Github插件代码的结束位置,并在该位置之前插入安装
# NERDTree插件的代码
sed -i "/^\" Github Plugin End/i\Plugin 'scrooloose/nerdtree'" $HOME/.vimrc
# 在.vimrc文件尾部追加该插件的配置
cat ./NERDTree_conf.txt >> $HOME/.vimrc
}
# 安装,配置状态栏增强插件vim-airline
function configVimAirLine() {
echo -e "\033[32m安装状态栏增强插件vim-airline\033[0m"
# 获取安装Github插件代码的结束位置,并在该位置之前插入安装
# vim-airline插件的代码
sed -i "/^\" Github Plugin End/i\Plugin 'vim-airline/vim-airline'" $HOME/.vimrc
sed -i "/^\" Github Plugin End/i\Plugin 'vim-airline/vim-airline-themes'" $HOME/.vimrc
# 在.vimrc文件尾部追加该插件的配置
cat ./AirLine_conf.txt >> $HOME/.vimrc
# 需要安装相应打过powerline补丁的字体,不然在airline状态栏无法正常
# 显示图标和三角形符号
#git clone https://github.com/powerline/fonts.git --depth=1
#cd fonts
#./install.sh
#mkdir -p ~/.config/fontconfig/conf.d
#cp fontconfig/*.conf ~/.config/fontconfig/conf.d
#cd ..
#rm -rf fonts
#fc-cache -vf
# wget https://raw.githubusercontent.com/powerline/powerline/develop/font/PowerlineSymbols.otf
# wget https://github.com/powerline/powerline/raw/develop/font/10-powerline-symbols.conf
wget https://github.com/powerline/powerline/raw/develop/font/PowerlineSymbols.otf
wget https://github.com/powerline/powerline/raw/develop/font/10-powerline-symbols.conf
mkdir -p ~/.local/share/fonts
mv PowerlineSymbols.otf ~/.local/share/fonts/
fc-cache -vf ~/.local/share/fonts/
mkdir -p ~/.config/fontconfig/conf.d
mv 10-powerline-symbols.conf ~/.config/fontconfig/conf.d/
}
# 安装,配置查看显示代码文件中的宏,函数,变量定义等的插件taglist
function configTaglist() {
echo -e "\033[32m安装查看显示代码文件中的宏,函数,变量定义等的插件taglist\033[0m"
# 获取安装Github插件代码的结束位置,并在该位置之前插入安装
# vim-scripts/taglist.vim插件的代码
sed -i "/^\" Github Plugin End/i\Plugin 'vim-scripts/taglist.vim'" $HOME/.vimrc
# 在.vimrc文件尾部追加该插件的配置
cat ./Taglist_conf.txt >> $HOME/.vimrc
# 需要安装ctags插件
sudo apt-get install exuberant-ctags
}
# 定义存储插件名称以及对应配置安装函数的字典
declare -A plugin_dict
plugin_dict=(
[YouCompleteMe]=configYouCompleteMe
[Syntastic]=configSyntastic
[SimpylFold]=configSimpylFold
[NERDTree]=configNERDTree
[AirLine]=configVimAirLine
[Taglist]=configTaglist
)
configVimBasic
# 命令行参数判断
echo -e "\033[32m正在进行插件安装......\033[0m"
ins_ycm=false
case $1 in
-s) # 安装指定的插件
for plugin in $@
do
if [ $plugin == YouCompleteMe ]; then
ins_ycm=true
fi
${plugin_dict[$plugin]}
done
;;
-v) # 不安装指定的插件
# 遍历plugin_dict所有的key
for plugin_name in ${!plugin_dict[*]}
do
canINS=true
# 检查该key是否在命令行参数中
for plugin in $@
do
# 如果YCM在-v的参数中,则不安装YCM
if [ $plugin == YouCompleteMe ]; then
ins_ycm=false
fi
if [ $plugin_name == $plugin ]; then
canINS=false
fi
done
if $canINS; then
${plugin_dict[$plugin_name]}
fi
done
;;
-all | *) # 全部安装
ins_ycm=true
# 遍历plugin_dict所有的value
for plugin_install in ${plugin_dict[*]}
do
$plugin_install
done
;;
esac
vim +PluginInstall +qall
# 如果安装了自动补全插件YouCompleteMe,则编译该插件
if $ins_ycm; then
makeYouCompleteMe
fi
echo -e "\033[32m插件安装完成!\033[0m"
echo -e "\033[32mEnjoy...\033[0m"