<< 向左缩进
>> 向左缩进
1、vim命令mode下快捷命令
(插入mode——ESC—–>命令mode):
(命令mode—— i —–>插入mode):
/name
从光标开始处向文件尾搜索名为name的字符串(所有完毕后,按n查找下一个,N查找上一个)全词匹配就是查找以其打头和以其结尾的字符串,eg. /\<int\>?name
从光标开始处向文件头搜索名为name的字符串(所有完毕后,按n查找下一个,N查找上一个)(这个不常用)u
取消前一个操作(相当于撤销)[n]yy
拷贝当前开始的n行(省略n则只拷贝当前行)[n]dd
删除当前开始的n行(省略n则只删除当前行)p
粘帖:xx
执行vim命令,xx可以是: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 表示跳转到某一行
"g"+"d" 高亮选中光标处的单词 ,n开始向下搜索!
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)
:%!xxd (会将当前文本使用xxd命令显示,二进制的,可做相应的修改)
:%!xxd -r (将xxd风格的二进制显示,转成真实的二进制映像写回到原来的文件)
:wq! (退出)
5、同时打开多个文件:
vim -o file1 file2 file3 (多视图打开多个文件)
vim -O file1 file2 file3 (只是一个横向一个纵向显示)
在已经打开了某个文件的情况下:
:sp fileother
:vs fileother
直接 vim file1 file2 file3 则只会出现一个视图,:n切换到下一个视图,:N切换到上一个视图
或者直接打开一个文件后,:edit file2 打开另一个文件
6、配置vim(下面的插件管理似乎更好)
//for config vim,3 files = .vimrc + taglist_46.zip + ctags-5.8.tar.gz
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
参考的配置
"这个文件是我的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>
简化版
"设置mapleader
let mapleader = ","
"不要生成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:\
""""""""""""""""""""""""""""""""""""""""""""""
" 快捷按键映射"
""""""""""""""""""""""""""""""""""""""""""""""
"搜索完毕的时候使用 ctrl+h 清除高亮
"C表示ctrl,A表示alt,S表示Shift
map <C-h> :nohl <cr>
map <F2> :w!<cr>
map <F3> :q!<cr>
"imap = insert mode map,this imap means esc to commad mode and :wq!
imap <F2> <Esc>:w!<cr>
imap <F3> <Esc>:q!<cr>
"多视图打开文件后,切换视图
map ` <C-w><C-w>
"多tab打开另一个文件(浏览方式更直观,打开这个tab页后也是可以 / 搜索文件并打开的)
map <F4> :Te .<cr>
"切换tab
map <S-PageUp> gT <cr>
map <S-PageDown> gt <cr>
imap <S-PageUp> <Esc>gT<cr>
imap <S-PageDown> <Esc>gt<cr>
"多视图打开另一个文件
"map <F4> :vsp
"直接打开多个文件后,切换到下一个文件和上一个文件
"map <F6> :n<cr>
"map <F5> :N<cr>
"imap <F6> <Esc>:n<cr>
"imap <F5> <Esc>:N<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就可以正常使用了
vim的列编辑操作
删除列
1.光标定位到要操作的地方。
2.CTRL+v 进入“可视 块”模式,选取这一列操作多少行。
3.d 删除。
插入列
插入操作的话知识稍有区别。例如我们在每一行前都插入"() ":
1.光标定位到要操作的地方。
2.CTRL+v 进入“可视 块”模式,选取这一列操作多少行。
3.SHIFT+i(I) 输入要插入的内容。
4.ESC 按两次,会在每行的选定的区域出现插入的内容。
多文件编辑操作
:Te . 开启多文件,gt切换到其他文件,shift+v 选中目标行后,使用 y 复制,gt切换到指定文件使用 p 粘贴