VIM 配置及内核代码编译

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 配置文本编辑器 VIM 来提高在LInux环境下C++的开发体验

1. 编译安装python

  1.1 下载 python 源代码

$wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
$tar -zxvf Python-3.6.5.tgz; cd Python-3.6.5/

  1.2 安装 zlib 相关依赖

$sudo yum -y install zlib*

  1.3 配置生成 makefile

$./configure --prefix=/usr/local --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib" --enable-unicode=ucs4 --enable-optimizations

  1.4 编译安装 python

$make
$sudo make altinstall 
$sudo ln -sv /usr/local/bin/python3.6 /usr/local/bin/python
$sudo unlink /usr/bin/python; sudo ln -sv /usr/local/bin/python /usr/bin/python
$sudo unlink /home/tops/bin/python; sudo ln -sv /usr/local/bin/python /home/tops/bin/python

  升级 python 之后可能会因为语法不一致导致依赖于旧版本 python 的软件工作不正常
  例如运行 yum 可能会出现如下错误

$ yum 
File "/usr/bin/yum", line 30 
except KeyboardInterrupt, e:                                         
SyntaxError: invalid syntax

  解决的办法:
  1. 升级 yum
  2. 或者修改 yum 使用的语法解释器
      修改 #!/usr/bin/python 为 #!/usr/bin/python2.7
  3. 在编译VIM之后把 /home/tops/bin/python 软连接回 python2.7

#Sctipt to switch to python 3
$cat ~/rain/p3.sh

sudo unlink /home/tops/bin/python
sudo ln -sv /usr/local/bin/python /home/tops/bin/python
ls -al /home/tops/bin/python

sudo unlink /usr/bin/python•
sudo ln -sv /usr/local/bin/python /usr/bin/python•
ls -al /usr/bin/python

#################################

#Sctipt to switch to python 2
$cat ~/rain/p2.sh

sudo mv /home/tops/bin/python /home/tops/bin/python-bak
sudo ln -sv /home/tops/bin/python2 /home/tops/bin/python
ls -al /home/tops/bin/python

sudo mv /usr/bin/python /usr/bin/python-bak•
sudo ln -sv /usr/bin/python2 /usr/bin/python•
ls -al /usr/bin/python

2. 编译安装VIM

  2.1 安装相关依赖,如果可以直接安装 python可以省去前面编译过程

$sudo yum install lua lua-devel –y
$sudo yum install ncurses-devel
$sudo yum install -y ruby ruby-devel lua lua-devel luajit uajit-devel ctags git python python-devel python3 python3-devel tcl-devel perl perl-devel perl-ExtUtils-ParseXS perl-ExtUtils-XSpp perl-ExtUtils-CBuilder perl-ExtUtils-Embed

  2.2 删除存在的 VIM

sudo yum remove vim vim-runtime gvim

  2.3 克隆 VIM 源代码

$git clone https://github.com/vim/vim.git; cd vim

  2.4 配置生成 makefile

$./configure --enable-multibyte --enable-perlinterp=yes --enable-rubyinterp=yes --enable-python3interp=yes --enable-luainterp=yes --enable-gui=auto --enable-cscope --disable-selinux --with-features=huge --prefix=/usr/local

  如果编译之后的 VIM 版本信息里面不包含 +python3,可以尝试添加 Python3 配置路径 

--with-python3-config-dir=/usr/local/lib/python3.6/config-3.6m-x86_64-linux-gnu

  python路径需要改成实际路径

  2.5 编译安装VIM 到 /usr/local/share/vim/vim80

make VIMRUNTIMEDIR=/usr/local/share/vim/vim80
sudo make install

3 配置 VIM

  3.1 安装配置 spf13 (refer to https://github.com/spf13/spf13-vim)

curl https://j.mp/spf13-vim3 -L > spf13-vim.sh && sh spf13-vim.sh

  安装后会创建 ~/.spf13-vim-3 目录,对于 VIM 的配置基本上只需要涉及如下文件
  1. ~/.vimrc.before.local 自定义配置,spf13 加载 .vimrc 之后被读取
  2. ~/.vimrc.bundles.local 自定义安装插件配置

  如果前面安装的时候没有指定 VIM 的运行时路径可以在 ~/.vimrc.before.local 里面添加

let $VIMRUNTIME=”/usr/local/share/vim/vim80”


  解决拼写错误  Warning: Cannot find word list "en.utf-8.spl" or "en.ascii.spl"
  运行 VIM 并执行 :echo substitute(&rtp, ',', '\n', 'g') 来检查 $VIMRUNTIME 是不是存在,    如果不存在于上述命令的结果,在 ~/.vimrc.before 里面添加

set rtp^=$VIMRUNTIME


  设置拷贝内容到系统剪切板,在 ~/.vimrc.before 里面添加

set copy to clipboard
set clipboard=unnamedplus


  设置 VIM 配色主题,在 ~/.vimrc.before.local 或者 ~/.vimrc.local 里面添加

"colorscheme desert
"colorscheme gruvbox
"colorscheme molokai
"colorscheme solarized
"目前喜欢这个主题
colorscheme ron

  3.2 安装基于语义的自动补全插件 YouCompleteMe (refer to https://github.com/Valloric/YouCompleteMe)

  用 VIM 打开 ~/.vimrc.before.local 并添加

let g:spf13_bundle_groups=['general', 'programming', 'misc', 'scala', 'youcompleteme']

 
  在打开的VIM里执行命令更新插件,会自动安装YouCompleteMe

:w
:RundleInstall
:wq

    3.2.1 Troubleshooting

    YouCompleteMe unavailable no module named frozendict( or future)。
  【原因】
    YCM 依赖的安装包没有成功安装,一般是网速不佳,下载出错,或者中途人为退出。
  【解决方法】
    手工安装。 例如

$sudo pip3 install future

    或者通过 GIT 重新克隆依赖的库之后再安装

$cd ~/.vim/bundle/YouCompleteMe/; git submodule update --init --recursive; vim +BundleInstall

   3.2.2 安装 cmake

  YouCompleteMe 用 cmake 编译代码来分析依赖关系,并提示可能的语法错误

yum install cmake

  或者下载源代码编译安装
  https://www.atatech.org/articles/105727

  3.2.3 编译YouCompleteMe,相当于生成符号的数据库 ycm_core.so

$cd ~/.vim/bundle/YouCompleteMe; ./install.py --clang-completer --enable-coverage --enable-debug

  3.2.4 配置对 C/C++ (clang) 代码的自动补全

  设置代码补全的搜索路径,可以添加其他目录

$sudo mkdir -p -m 777 ~/.vim/data/ycm
$cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/.vim/data/ycm/
$vim ~/.vim/data/ycm/.ycm_extra_conf.py
# [Rain] Additional include path
'-isystem', '/usr/include',
'-isystem', '/usr/local/include',
'-isystem', '/usr/include/c++/4.8.5',
'-I', '/usr/src/kernels/3.10.0-327.ali2010.alios7.x86_64/include'

  3.2.5 启动 VIM 时自动加载 YCM,在 ~/.vimrc.before.local 里添加

let g:acp_enableAtStartup = 1

  3.2.6 设置额外查找路径的 python 脚本路径

" global conf which is needed to resolve name in system include
" file or other  third-part include file
let g:ycm_global_ycm_extra_conf='~/.vim/data/ycm/.ycm_extra_conf.py'

  3.2.7 允许使用tags来进行补全

"enable completion from tags
let g:ycm_collect_identifiers_from_tags_files = 1
let g:ycm_seed_identifiers_with_syntax = 1
let g:ycm_confirm_extra_conf = 0
let g:ycm_cache_omnifunc=0
let g:ycm_key_invoke_completion = '<C-;>'

  3.2.8 Troubleshooting 

  •   Can't jump to definition
    在 VIM 里执行命令
    : YcmDiag​

    把提示的头文件的目录添加到~/.vim/data/ycm/.ycm_extra_conf.py 

  3.4 配置 VIM-Airline

  3.4.1 MaxOS 安装 PowerLine 字体,否则状态栏会出现乱码

# Install powerline font on MaxOS
$cd ~/.vim/bundle/fonts; ./install.sh

  3.4.2 更改 iterm2 文本字体

  通过快捷键Command+, 或者菜单(iterm2 -> Preferences)打开首选项->profile->text->Change Fonts,选择以 for powerline 结尾的字体。

  3.4 设置快捷键

  设置快捷键 F5 更新依赖关系,也就是用cmake编译代码

nnoremap <F5> :YcmForceCompileAndDiagnostics<CR>

 
  设置快捷键 F12 跳转声明和定义以及打开包含的头文件

nnoremap <F12> :YcmCompleter GoToDefinitionElseDeclaration<CR>

  3.10 安装、删除插件

echo Bundle \'Plugin Name\' >> ~/.vimrc.bundles.local

 
  例如安装vim官网的 grep 插件,我们可以使用

echo Bundle \‘vim-scripts/grep.vim\'  >> ~/.vimrc.bundles.local

 
  添加之后使用如下命令来安装

vim +BundleInstall! +BundleClean +q

 
  如果已经打开了 VIM 可以直接执行命令

:BundleInstall

 
  删除已经安装的插件

echo UnBundle \'Plugin Name\' >> ~/.vimrc.bundles.local


  执行删除插件的命令

vim +BundleClean +q


  如果已经打开了 VIM 可以直接执行命令

:BundleClean


  例如删除 vim官网的 grep 插件,我们可以使用

echo UnBundle \‘vim-scripts/grep.vim\'  >> ~/.vimrc.bundles.local

  3.11 自定义 VIM 颜色主题

  可以访问 http://bytefluent.com/vivify/
Custom Color

  保存颜色主题文件到本地之后拷贝到 VIM 颜色主题目录,然后更改 ~\.vimrc.local

$cp rain.vim to ~\.vim\colors
$echo colorscheme rain >> ~\.vimrc.local


  设置对.vimrc的更改立即生效

echo autocmd BufWritePost $MYVIMRC source $MYVIMRC >> .vimrc.before.local

  3.12 VIM 效果

  3.13 我使用的几个配置

  .vimrc.before.local 内容

let g:airline_powerline_fonts=1
let $VIMRUNTIME="/usr/local/share/vim/vim80"
set rtp^=$VIMRUNTIME
set clipboard=unnamedplus
let g:spf13_bundle_groups=['general', 'programming', 'misc', 'scala', 'youcompleteme', 'neocomplete' ]
let g:acp_enableAtStartup = 1

" configuration file for YCM to find include files
let g:ycm_global_ycm_extra_conf = '~/.vim/data/ycm/.ycm_extra_conf.py'

" enable completion from tags
let g:ycm_collect_identifiers_from_tags_files = 1
let g:ycm_seed_identifiers_with_syntax = 1
let g:ycm_confirm_extra_conf = 0
let g:ycm_cache_omnifunc = 1
let g:ycm_key_invoke_completion = '<C-K>'
let g:ycm_show_diagnostics_ui = 1
let g:ycm_always_populate_location_list = 1

" Disable highlight error/warning detected by syntastic
let g:syntastic_enable_highlighting = 0
let g:ycm_enable_diagnostic_highlighting = 0
" let g:syntastic_cpp_compiler = 'clang++'

" Enable code style check by cpplint
let g:syntastic_cpp_cpplint_exec = 'cpplint'
let g:syntastic_cpp_checkers = ['cpplint', 'gcc']
let g:syntastic_cpp_cpplint_thres = 1

" Set syntastic symbol icon
let g:syntastic_error_symbol = ""
let g:syntastic_warning_symbol = ""
let g:syntastic_style_error_symbol = '!'
let g:syntastic_style_warning_symbol = '?'

" Let syntax check and code style check show together
let syntastic_aggregate_errors = 1

autocmd BufWritePost $MYVIMRC source $MYVIMRC
set t_Co=256
set cursorline cursorcolumn
highlight CursorLine guibg=lightblue ctermbg=darkgray

" Setting for airline
" Airline theme
let g:airline_theme="luna"

" Enable powerline font to show arrow correctly
let g:airline_powerline_fonts = 1

" Enable tabline, show buffers in same tab
let g:airline#extensions#tabline#enabled = 1
" Show full path of current file in tab
let g:airline#extensions#tabline#fnamemod = ':p:~'
" Just show file name of current file in tab
"let g:airline#extensions#tabline#fnamemod = ':p:.'
" if show exact file path or collapsed path
let g:airline#extensions#tabline#fnamecollapse = 0
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#tabline#show_tab_nr = 1
" Show full path of current file in status bar
let g:airline_section_c = '%F'


 " Set hotkey to switch buffer
noremap <F1> :bn<CR>
noremap <F2> :bp<CR>

" hotkey for Grep.vim
noremap <F3> :Grep<CR>
noremap <F4> :Rgrep<CR>

" Setting for Tagbar
noremap <F5> :TagbarToggle<CR>
let g:tagbar_ctags_bin = 'ctags'
let g:tagbar_left = 0
let g:tagbar_width = 30
let g:tagbar_autofocus = 1
let g:tagbar_sort = 0

" Setting for NERDTree
noremap <F6> :NERDTreeToggle<CR>
let NERDTreeWinSize=32
let NERDTreeWinPos="left"
let NERDTreeShowHidden=1
let NERDTreeMinimalUI=1
let NERDTreeAutoDeleteBuffer=1

" Hotkey to switch header and source file
noremap <F7> :call CurtineIncSw()<CR>

set tags=tags
"noremap <F8> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.ctags/tags .<CR>

" Control vim to allow copy by xterm2
set number
set mouse=a
let g:Xterm2Copy=1
function! AllowXterm2Copy()
    if g:Xterm2Copy==0
        set number
        set mouse=a
        let g:Xterm2Copy=1
    else
        set nonumber
        set mouse-=a
        let g:Xterm2Copy=0
    endif
endfunction
noremap <F8> :call AllowXterm2Copy() <CR>

"noremap <F9> :YcmCompleter GetType<CR>

" Spell Check
setlocal nospell
let g:SpellChecking=0
function! SpellCheck()
    if g:SpellChecking==0
        setlocal spell spelllang=en_us
        echo "Spell checking based on en_us"
        let g:SpellChecking=1
    else
        setlocal nospell
        echo "Disable spell checking"
        let g:SpellChecking=0
    endif
endfunction


noremap <silent> <F9> :call SpellCheck()<CR>

" Map F10 to Control-O for run command in normal mode once  in only in insert mode
inoremap <F10> <C-O>

noremap <F11> :YcmDiags<CR>
"noremap <F11> :YcmForceCompileAndDiagnostics<CR>
noremap <F12> :YcmCompleter GoToDefinitionElseDeclaration<CR>

noremap <C-A> :cn<CR>
" Map ctrl-D to switch vim and shell
noremap <C-D> :sh<CR>


  .vimrc.bundles.local 内容

Bundle 'vim-scripts/conque-gdb'
Bundle 'vim-scripts/cscope.vim'
Bundle 'yegappan/grep'
Bundle 'neovim/neovim'
Bundle 'ericcurtin/CurtineIncSw.vim'


  .vimrc.local 内容

"colorscheme gruvbox
colorscheme ron

4 下载编译Linux 内核

  4.1 克隆master代码

$mkdir –m 777 kernelsrc; cd kernelsrc
$git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

  4.2 更新到特定版本快照

git tag -l | grep v3.10.*
git checkout v3.10

  4.3 创建系统内核包含文件到我们下载的代码

$sudo unlink /usr/src/linux; ln -sv ~/rain/kernelsrc/linux-stable/ /usr/src/linux

  4.4 创建软连接来解决编译错误 “missing files in asm folder”

$sudo ln -vs /usr/src/linux/arch/arm64/include/asm/ /usr/src/linux/include/asm

  4.5 拷贝内核配置文件及选择启用的系统模块

$cp /boot/config-3.10.0-327.el7.x86_64 .config
Or 
$zcat /proc/config.gz > .config

#Load kernel configuration from .config and ask confirm for other modules, then save original .config to .config.old
make menuconfig

#Set kernel name, not use empty character to avoid following trouble
General setup -> Local version

  4.6 创建虚拟窗口防止SSH终端断开连接影响编译

yum install screen
#List all allocated virtual windows
screen –ls
#Exit virtual window
screen –X quit

  4.7 编译内核

#Compile using 2 jobs
make –j2

#Install new kernel
make modules_install install

#[Troubleshooting]Make install error “Missing file: Debug, You need to run "make" before "make install"
make modules
make install

#Clean kernel build

#Remove most intermediate files except config file
make clean

#Remove intermediate files and config file
make mrproper

#Remove manually
remove modules not needed from /lib/modules/
remove kernel image from /boot
remove kernel source code from /usr/src/linux

#Modify grub configuration to remove startup item
vim /etc/grub2.cfg

 

 

 

 

 

 

目录
相关文章
|
20天前
|
Ubuntu 开发工具
Ubuntu vim配置支持鼠标
Ubuntu vim配置支持鼠标
12 0
|
5月前
|
JSON Linux 开发工具
Linux jq 、vim以及LInux集群安装miniconda并配置虚拟环境(笔记)
Linux jq 、vim以及LInux集群安装miniconda并配置虚拟环境(笔记)
58 0
|
2月前
|
IDE Linux 开发工具
【Linux】vim配置
【Linux】vim配置
【Linux】vim配置
|
2月前
|
Linux 开发工具 C++
Linux编辑器vim(含vim的配置)
Linux编辑器vim(含vim的配置)
52 0
|
3月前
|
人工智能 Linux Shell
Linux——vim简介、配置方案(附带超美观的配置方案)、常用模式的基本操作
Linux——vim简介、配置方案(附带超美观的配置方案)、常用模式的基本操作
|
3月前
|
Ubuntu 开发工具 Windows
vim 在windows系统和ubuntu系统中的配置
vim 在windows系统和ubuntu系统中的配置
|
3月前
|
Ubuntu Linux 开发工具
Linux(centOS7)虚拟机中配置 vim
Linux(centOS7)虚拟机中配置 vim
96 0
|
4月前
|
机器学习/深度学习 Linux 开发工具
【Linxu工具】:vim使用及简单配置
【Linxu工具】:vim使用及简单配置
90 0
|
4月前
|
开发工具 iOS开发 MacOS
macOS配置Vim默认带行号
macOS配置Vim默认带行号
27 0
|
4月前
|
数据可视化 Linux 开发工具
《Linux从练气到飞升》No.04 Linux编辑器:vim的使用和一键配置
《Linux从练气到飞升》No.04 Linux编辑器:vim的使用和一键配置
42 0