0%

vim

安装

升级8

1
2
3
4
5
6
yum -y install ncurses-devel
wget https://github.com/vim/vim/archive/master.zip
unzip master.zip
cd vim-master/src
./configure --prefix=/centos/install/vim8 --with-features=huge --enable-multibyte=yes --enable-cscope=yes --enable-python3interp=dynamic --with-python3-config-dir=/centos/install/python3.5.4/lib/python3.5/config-3.5m

基本命令

47625f6b5a17145ee9bcccdc53436302.png

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
############# {} 表示的需要替换
############# | 表示或
############# [,] 表示或
############# {N} 表示数字
############# {A} 表示字符
{N}cc #删除N行,并插入
{N}dd #删除N行,默认为1
d$ #删除至行尾
db #删除光标前单词,符号和空格
dG #删除到文尾
dw #删除单词、标点符号或空格
F/f{A[,N]} #搜索A或N
gg #文首
gf #打开光标处的文件名
{N}J #将后面的N行合并到当前行
{N}yy #复制N行,默认为1
{N}p #重复复制N次,默认为1
T/t+要搜索的{A|N},将焦点移动到行内A|N的t(前)面或T(后)
ZZ #保存退出中间
ZQ #不保存退出
{N}zt|z|b #将第N行置为屏幕顶|中间|底行,默认是当前行
#其中t == Enter; - == b
V #可视化模式,按行操作
v #可视化模式,按字符操作
ctrl+v #成列操作
#命令行模式下,即先冒号:进入命令行模式,然后输入命令
{N}r filename #读入filename内容,并在第N行插入
{N1},{N2}s/old/new/|g ##替换 第N1-第N2行 第一个或所有 old 为 new
#N1默认为1,N2默认为当前行,$表示最后一行
#N1可以小于N2
#.表示当前行
#当前分隔符是/,当使用+,#作为分隔符时,字符中出现的/会被视作普通字符
%s/old/new/|g # 等同于 1,$s/old/new/|g
g {NA} #搜索字符串
g/old/ss/new/|g #等同于 %s/old/new/|g

################滚动
Ctrl+y #上滚一行
Ctrl+u #上滚半页
Ctrl+d #下滚半页
Ctrl+b #上滚一页
Ctrl+f #下滚一页
{N}H #将光标移动到屏幕顶行下的第N行,默认为1
{N}L #将光标移动到屏幕底行上的第N行,默认为1
z+Enter #
###################保存退出
:w |filename #保存为filename(默认是当前文件),不退出
:wq | ZZ |x #保存并退出
:q! #不保存退出
:e! #放弃所有修改,从上次保存文件开始再编辑

解决方案

支持python3

  1. ./configure --enable-python3interp=dynamic --with-python3-config-dir=python对应版本的配置路径
  2. 在对应vimrc配置文件中 set pythonthreedll=/python-path/libpython3.so

编码

encoding、fileencoding、fileencodings、termercoding(终端)

流程

  1. vim启动,根据vimrc设置的encoding来设置buffer、菜单、消息等
  2. 读取文件时,根据fileencodings的编码方式列表,解码文件,直到解码无错误,并设置此时的编码方式为fileencoding
  3. 对比步骤2》的fileencoding的值与encoding的值,若不同则调用iconc将内容由fileencoding转为encoding,此时需要iconv
  4. 保存文件时,再次对比fileencoding和encoding,若不同再次调用iconv进行转换,最后保存为fileencoding编码;

插件

vundle

  1. 安装

    • 可以将vundle安装到任何位置,只要在配置文件中即set rtp=能够指定即可

    • 当在配置文件中设置了插件安装路径时,尽量不要与下载的vundle在同一目录,因为执行vundle的PluginClean时,它默认从安装目录中删除在配置文件中无效的插件(即插件文件夹),这里的无效是指配置文件中已注释的插件和在安装目录中无效的文件夹(即在配置文件中没有出现的文件夹),其实简单的说就是在安装目录中只保留在配置文件中有效插件对应的文件夹,其余的全删掉

    • 尽量将插件安装在$HOME下,因为有时会因为用户没有权限而造成插件使用失败;

  2. vimrc配置

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
set nocompatible  " 去除VI一致性,必须要添加
filetype off " 必须要添加
" 设置包括vundle和初始化相关的runtime path
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin() " 请将安装插件的命令放在vundle#begin和vundle#end之间.
" 另一种选择, 指定一个vundle安装插件的路径
"call vundle#begin('~/some/path/here')
" 让vundle管理插件版本,必须
Plugin 'VundleVim/Vundle.vim'
" 以下范例用来支持不同格式的插件安装.
" Github上的插件
" 格式为 Plugin '用户名/插件仓库名'
Plugin 'tpope/vim-fugitive'
" 来自 http://vim-scripts.org/vim/scripts.html 的插件
" Plugin '插件名称' 实际上是 Plugin 'vim-scripts/插件仓库名' 只是此处的用户名可以省略
Plugin 'L9'
" 由Git支持但不再github上的插件仓库 Plugin 'git clone 后面的地址'
Plugin 'git://git.wincent.com/command-t.git'
" 本地的Git仓库(例如自己的插件) Plugin 'file:///+本地插件仓库绝对路径'
Plugin 'file:///home/gmarik/path/to/plugin'
" 插件在仓库的子目录中.
" 正确指定路径用以设置runtimepath. 以下范例插件在sparkup/vim目录下
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" 安装L9,如果已经安装过这个插件,可利用以下格式避免命名冲突
Plugin 'ascenator/L9', {'name': 'newL9'}
" 你的所有插件需要在下面这行之前
call vundle#end() " 必须
filetype plugin indent on " 必须 加载vim自带和插件相应的语法和文件类型相关脚本
" 忽视插件改变缩进,可以使用以下替代:
"filetype plugin on
查阅 :h vundle 获取更多细节和wiki以及FAQ
将你自己对非插件片段放在这行之后

  1. 基本命令
1
2
3
4
5
6
:PluginList       - 列出所有已配置的插件
:PluginList - 更新插件
:PluginInstall - 安装插件,追加 `!` 用以更新或使用 :PluginUpdate
:PluginSearch foo - 搜索 foo ; 追加 `!` 清除本地缓存
:PluginClean - 清除未使用插件,需要确认; 追加 `!` 自动批准移除未使用插件,需要在vimrc中移除想要清除的插件

  1. 插件管理

    1. 将插件按照规则写在vimrc文件中
    2. 保存退出之后,有两种安装方式:
      1. 运行vim,再运行 :PluginInstall
      2. 命令行运行直接安装,vim +PluginInstall +qall
  2. pass

jedi

Plugin 'davidhalter/jedi-vim'

<leader> 是 \

  • ctrl+space 自动补全
  • \+d jump to define
  • \+g jump to declaration
  • K display documents
  • \+n display the call list
  • ctrl+o a backward jump when a function jumps
  • ctrl+i a forward jump when a function jumps

nerdcomment

目录树

  1. 安装
    Plugin 'scrooloose/nerdtree'

  2. vimrc配置

1
2
3
#F3 快捷键 显示或隐藏 目录
map <F3> :NERDTreeMirror<CR>
map <F3> :NERDTreeToggle<CR>
  1. ? 弹出、关闭帮助窗口

taglist or tagbar

  1. install
    Plugin 'taglist.vim'

  2. config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let Tlist_Show_One_File=1     "不同时显示多个文件的tag,只显示当前文件的    
let Tlist_Exit_OnlyWindow=1 "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Ctags_Cmd="/usr/bin/ctags" "将taglist与ctags关联
let Tlist_Sort_Type="name" "按名称排序,默认为按所属类
let Tlist_Use_Right_Window=1 "窗口出现在右侧
let Tlist_Show_Menu=1 "显示菜单,Tlist_Max_Submenu_Items和Tlist_Max_Tag_Length来控制菜单条目数和所显示tag名字的长度;
let Tlist_Use_SingleClick=1 "单击tag跳转,默认是双击
let Tlist_Auto_Open=1 "随着vim启动打开tag
let Tlist_Close_On_Select=1 "选中tag后关闭
let Tlist_File_Fold_Auto_Close=1 "同时显示多个文件的taglist
let Tlist_GainFocus_On_ToggleOpen=1 "在使用:TlistToggle打开taglist窗口时,如果希望输入焦点在taglist窗口中
let Tlist_Process_File_Always=1 "taglist始终解析文件中的tag,不管taglist窗口有没有打开,设置为1;
"Tlist_WinHeight和Tlist_WinWidth可以设置taglist窗口的高度和宽度。Tlist_Use_Horiz_Window为1设置taglist窗口横向显示;

  1. command
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<CR>      跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
o 在一个新打开的窗口中显示光标下tag
<Space> 显示光标下tag的原型定义会在最底部的状态栏显示, 函数的原型
u 更新taglist窗口中的tag
s 更改排序方式,在按名字排序和按出现顺序排序间切换
x taglist窗口放大和缩小,方便查看较长的tag
+ 打开一个折叠,同zo
- 将tag折叠起来,同zc
* 打开所有的折叠,同zR
= 将所有tag折叠起来,同zM // 上面这些就是折叠的操作了
[[ 跳到前一个文件
]] 跳到后一个文件
q 关闭taglist窗口