技术改变生活

博客园 首页 新随笔 联系 订阅 管理

 

用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




posted on 2019-06-24 21:49  小阿峰  阅读(311)  评论(0编辑  收藏  举报