用vim写代码时,经常遇到这样的场景,复制多行,然后粘贴。
可以这样做:
1. 将光标移动到要复制的文本开始的地方,按v进入可视模式。
2. 将光标移动到要复制的文本的结束的地方,按y复制。此时vim会自动将光标定位到选中文本的开始的地方,并退出可视模式。
3. 我移动光标到文本结束的地方,按p粘贴。
esc键通用,回到命令模式
使用技巧:
:set ic 忽略大小写
:w newfile 保存为一个新文件
:r file 在当前光标所在位置,将file文件内容插入到当前光标处
:!command 在vim中查看一个命令的执行结果,无需退出vim
:r !command 在当前光标所在处,将command执行的命令结果值插入到当前光标所在处
:x 保存并退出
:wq 保存并退出
:q! 不保存退出
gg 回到首行
G 跳到尾行
h 往左侧移动光标位置
j 往上侧移动光标位置
k 往下侧移动光标位置
l 往右侧移动光标位置
w 一次跳转一个单词、
a 在光标所在位置后插入
i 在光标所在位置前插入
o 在光标所在行后插入
x 删除光标所在位置处字符
r 替换当前光标所在处字符
d$ 删除光标所在处字符至行尾
d^ 删除光标所在处字符至行首
dd 删除当前光标所在的行
ndd 删除当前光标所在行及其后n行
J 删除当前行后的换行符
y 复制当前所选的字符
yy 复制当前所在的行
nyy 复制当前所在的行及其后n行
yG 复制当前所在的行至最后一行
ygg 复制当前光标所在位置至首行
p 粘贴
:%s/oldcontent/newcontent/g 替换旧的内容为新的内容,g代表全文替换,%代表全文搜索
:3,5s/oldcontent/newcontent/ 将3-5行的第一个查找的旧的内容替换为新的内容,仅替换第一个匹配的内容
另外,vim支持正则表达式
:nohigh 取消高亮显示
在linux中使用vi 打开文件时,能显示行号
最近使用Vim来粘贴外部文本内容,发现在Vim中粘贴shell代码后,缩进就全乱了。
仔细研究了以下,原来是自动缩进的缘故,取消了自动缩进和智能缩进,这样粘贴就不会错行了。但在有的vim中不行,还是排版错乱。
后来发现了更好用的设置::set paste进入paste模式以后,可以在插入模式下粘贴内容,不会有任何变形。这个真是非常好用
使用vi编辑~/.vimrc文件,在该文件中加入一行"set nu",添加内容不含引号, 命令如下:
vim ~/.vimrc
"===================
"适合自己用的vimrc配置文件
"===================
"设置编码
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
"自动保存
set autowrite
"=============新建.c,.h,.sh,.java文件,自动插入文件头
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"
"定义函数SetTitle,自动插入文件头
func SetTitle()
"如果文件类型为.sh文件
if &filetype == 'sh'
call setline(1,"\############################")
call append(line("."), "\# File Name: ".expand("%"))
call append(line(".")+1, "\# Author: Mr.Feng")
call append(line(".")+2, "\# mail: 1220033555@qq.com")
call append(line(".")+3, "\# Created Time: ".strftime("%c"))
call append(line(".")+4, "\############################")
call append(line(".")+5, "\#!/bin/bash")
call append(line(".")+6, "")
else
call setline(1, "/******************************")
call append(line("."), " > File Name: ".expand("%"))
call append(line(".")+1, " > "Author: Mr.Feng")
call append(line(".")+2, " > Mail: 1220033555@qq.com ")
call append(line(".")+3, " > Created Time: ".strftime("%c"))
call append(line(".")+4, " *****************************/")
call append(line(".")+5, "")
endif
"新建文件后,自动定位到文件末尾
autocmd BufNewFile * normal G
endfunc