ddddfang's Blog.

vim

字数统计: 2.1k阅读时长: 9 min
2019/01/28 Share
1
2
<<  向左缩进
>> 向左缩进

1、vim命令mode下快捷命令

(插入mode——ESC—–>命令mode):
(命令mode—— i —–>插入mode):

  • /name 从光标开始处向文件尾搜索名为name的字符串(所有完毕后,按n查找下一个,N查找上一个)
  • ?name 从光标开始处向文件头搜索名为name的字符串(所有完毕后,按n查找下一个,N查找上一个)(这个不常用)
  • u 取消前一个操作(相当于撤销)
  • [n]yy 拷贝当前开始的n行(省略n则只拷贝当前行)
  • [n]dd 删除当前开始的n行(省略n则只删除当前行)
  • p 粘帖
  • :xx 执行vim命令,xx可以是:
    1
    2
    3
    4
    5
    6
    wq(保存退出)wq!(强制保存并退出)q(退出不保存)q!(强制退出不保存)
    w(只是写入,即保存),w [filename] (另存为)
    nohl(清除高亮) set nu(显示行号) set nonu(不显示行号)
    g/p1/s//p2/g (将文件中的所有p1用p2替换。等效于 %s/p1/p2/g )
    [n1,n2]s/p1/p2/g (n1->n2行中的所有p1用p2替换。缺省则当前行 )
    number 表示跳转到某一行

2、vim翻页(命令modr插入mode都valid):

pageup (向上翻页,等效于 ctrl+f)
pagedown (向下翻页,等效于 ctrl+b)

3、vim下多行(列)选中复制(or剪切):

  • 命令行模式下,将光标移动到需要选中的行的开始,shift+v即进入vim多行选中模式。选中后,y即复制,d即剪切。< 向左缩进,> 向右缩进, == 自动排版.ctrl+c即退出多行选中mode。
  • ctrl+v进入多块选中模式(可以选择多列哦)。选中后,y即复制,d即剪切。ctrl+c即退出。

4、vim二进制编辑:

命令行mode下,(打开的时候直接 vim -b xxx 据说 vim不会在文件末添加 0x0a)

1
2
3
:%!xxd       (会将当前文本使用xxd命令显示,二进制的,可做相应的修改)
:%!xxd -r (将xxd风格的二进制显示,转成真实的二进制映像写回到原来的文件)
:wq! (退出)

5、同时打开多个文件:

vim -o file1 file2 file3
vim -O file1 file2 file3 (只是一个横向一个纵向显示)
在已经打开了某个文件的情况下:
:sp fileother
:vs fileother

6、配置vim(下面的插件管理似乎更好)

//for config vim,3 files = .vimrc + taglist_46.zip + ctags-5.8.tar.gz

1
2
3
4
5
6
7
8
cd /root/Desktop/
unzip taglist_46.zip
cp plugin/taglist.vim /usr/share/vim/vim74/plugin/ (有用的只是这个 taglist.vim )
cp /mnt/hgfs/shareLinux/ctags-5.8.tar.gz .
tar vxzf ctags-5.8.tar.gz && cd ctags-5.8
./configure
make
make install

taglist即解析当前文件中的函数和宏等,将解析结果以左侧abstract窗口的形式展示

提供的功能即从左侧的abstract直接跳到对应的函数中。

ctags安装完成后,terminal下运行

#ctag -R . //即以当前目录为起点递归解析,最后在当前目录下生成tags文件,此后vim即可根据此文件进行跳转
//(试了很多方法,但貌似这个tags只有放在当前project顶级目录才好用……)

#vim -t main //vim打开,直接已main函数作为entry(或者普通mode打开也ok,但应该在tags文件所在目录下运行vim)
进入vim后,
命令行mode,:tag funcABC 可跳转到 funcABC 定义处,如果有多处定义,则 :tn 和 :tp 可依次向后/前查找匹配的函数。
命令行mode,ctrl+] 立即跳转到光标停留的函数的定义处。ctrl+t返回。

//这个cscope不好用。。。。不如直接grep了
find $(pwd) -name “.[ch]” >cscope.files
find . -name “
.h” -o -name “.c” -o -name “.cpp” > cscope.files

cscope -bkq -i cscope.files

7、插件管理:

将开源仓库克隆到 ~/.vim/bundle/ 下,取名 Vundle.vim
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

Vundle是一个插件管理工具,详细介绍参见github仓库的介绍。 参考

  • 安装一个插件:
    按照 Vundle 要求在~/.vimrc中 Vundle的 begin()和end()之间写上插件名字
    Plugin ‘tpope/vim-fugitive’
    然后随便打开一个vim进入命令行输入mode,
    :BundleInstall 即可安装尚未安装的插件(到~/.vim/bundle/ 下)

  • 移除一个插件:
    按照 Vundle 要求在~/.vimrc中 Vundle的 begin()和end()之间将某个插件去掉
    然后随便打开一个vim
    :BundleClean

  • 查看目前已经安装的插件:
    随便打开一个vim
    :BundleList

参考的配置

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
"这个文件是我的vim配置,~/.vimrc
"设置mapleader
let mapleader = ","

"重新加载.vimrc
map <silent> <leader>ss :source ~/.vimrc<cr>
"快速编辑.vimrc
map <silent> <leader>ee :e ~/.vimrc<cr>

"当.vimrc文件被编辑的时候自动执行source操作
autocmd! bufwritepost .vimrc source ~/.vimrc

"==================================================================================


"不要生成swap文件,当buffer被丢弃的时候隐藏它
setlocal noswapfile
set bufhidden=hide


"在状态行上显示光标所在位置的行号和列号(default)
set ruler
set rulerformat=%20(%2*%<%f%=\ %m%r\ %3l\ %c\ %p%%%)

"command line 高度设为1
set cmdheight=1

"显示行号
set nu

"光标移动到buffer的顶部和底部时保持3行距离
set scrolloff=3

"制表符为4统一缩进为4
set tabstop=4
set softtabstop=4
set shiftwidth=4

"继承前一行的缩进方式,特别适用于多行注释
set autoindent

"用空格代替制表符
set expandtab

"在搜索的时候忽略大小写
set ignorecase

"在搜索时,输入的词句的逐字符高亮(类似firefox的搜索)
set incsearch
"搜到之后高亮
set hlsearch

"在处理未保存或只读文件的时候,弹出确认
set confirm

"允许backspace和光标键跨越行边界
set whichwrap+=<,>,h,l

"即使一行很长也不要auto换行
set nowrap

"在被分割的窗口间显示空白,便于阅读
set fillchars=vert:\ ,stl:\ ,stlnc:\

"颜色风格
colorscheme torte



""""""""""""""""""""""""""""""""""""""""""""""
" 快捷按键映射"
""""""""""""""""""""""""""""""""""""""""""""""
"保存
map S :wq! <cr>
map Q :q! <cr>
"搜索完毕的时候使用 ctrl+h 清除高亮
map <C-h> :nohl <cr>

map <F2> :w!<cr>
map <F4> :wq!<cr>
map <F3> :q!<cr>
"imap = insert mode map,this imap means esc to commad mode and :wq!
imap <F2> <Esc>:w!<cr>
imap <F4> <Esc>:wq!<cr>
imap <F3> <Esc>:q!<cr>


"====================================== TagList =================================
" 按照名称排序
let Tlist_Sort_Type = "name"

" 默认打开Taglist
let Tlist_Auto_Open=1

" 在左侧显示窗口
let Tlist_Use_Left_Window = 1

" 压缩方式
let Tlist_Compart_Format = 1

" 如果只有一个buffer,kill窗口也kill掉buffer
let Tlist_Exist_OnlyWindow = 1

" 不要显示折叠树
let Tlist_Enable_Fold_Column = 0

" 不要关闭其他文件的tags
let Tlist_File_Fold_Auto_Close = 0

let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1

" switch on/off taglist
map <C-e> :Tlist<cr>
imap <C-e> <Esc>:Tlist<cr>

" switch between taglist and normal code
" its original is double Ctrl+W ...
map ` <C-w><C-w>

"====================================================================
" we find tags file in this path
" refer to .bashrc, alias ct to <generate tags and mv to ~/.vim/tags>
"set tags=tags;
map <C-n> :tn<cr>
map <C-p> :tp<cr>

修正vi编辑器:
vi/vim编辑器在linux中是非常常用的文本编辑工具,但不一定好使,比如编辑的时候可能按方向键会出现莫名奇妙的字符,还有按backspace退格键也可能没有任何作用。修正方法,Terminal中输入 sudo vi /etc/vim/vimrc.tiny 使用vi打开vi的配置文件来修正配置,是不是有点诡异?没关系,能行的。然后按Esc键进入vi编辑器的命令模式, 输入 :set nocompatible (注意不要忘记前面的 : 符号,回车, 此时方向键暂时可以正常使用了,然后按Esc键,输入 :set backspace=2 ,此时删除键也能临时工作了。
然后按方向键找到 配置文件的 set compatible 一行,按i键进入编辑模式, 将它改为 set nocompatible
完了在下一行输入 set backspace=2 ,好了,按Esc键,再键入 :x 保存并退出vi, 以后vi就可以正常使用了

CATALOG
  1. 1. 1、vim命令mode下快捷命令
  2. 2. 2、vim翻页(命令modr插入mode都valid):
  3. 3. 3、vim下多行(列)选中复制(or剪切):
  4. 4. 4、vim二进制编辑:
  5. 5. 5、同时打开多个文件:
  6. 6. 6、配置vim(下面的插件管理似乎更好)
  7. 7. 7、插件管理:
  8. 8. 参考的配置