如何使用类Unix系统下原生态的高效编辑器?vim!

发布于:2024-06-19 ⋅ 阅读:(134) ⋅ 点赞:(0)

        vi是类Unix系统下不过时的编辑器,vim是它的升级版。很多时候需要临时编辑一个文件,IDE并不总是可用的.这个时候,vim就派上用场了。简单教程可以`vimtutor`,本文总结了一些常见的用法,会不断迭代。

1)习惯没有IDE的字符界面, 了解VI的三种模式

command模式---view模式---insert模式

2) 键盘上通用的复制粘贴(注意:不是ctrl + c 与 ctrl + v)

选中,复制: ctrl + insert

insert模式, 粘贴: shift + insert

command模式, 设置粘贴不混乱(区分空白符):set paste

command模式, 设置粘贴不混乱(不区分空白符):set nopaste

3) 似曾相识的功能插件(对于习惯windows环境的读者来说, 虽然蹩脚但还凑合)

        #文件目录树::netrw

从shell进入netrw:vim dirpath

从vim的command模式进入netrw:E

ENTER :1) 文件; 2) 进入目录;

-:返回上一级目录

s:按照时间, 大小, 文件名等关键字排序

D:删除文件(不能删除目录)

R:重命名文件/目录

        #多个窗口,多个文件::split, vsplit

command模式, 上下分割:split [filepath]

command模式, 左右分割:vsplit [filepath]

command模式,关闭当前文件:close

command模式,关其它文件:only

view模式,切换当前编辑的文件:ctrl + w [+h][+j][+k][+l]

command模式,搜索打开任意文件:find filename[TAB]

配置搜索路径打开工程下的任意一个文件:set path+=/tmp/**

        #工程浏览::ctags

shell安装:yum -y install ctags

command模式, 为当前目录下所有文件生成全局索引:!ctags -R

command模式, 跳转到关键词的定义: tjump keyword (多处, 输入数值,回车)

view模式, 跳转到定义:ctrl + ]

view模式, 回溯:ctrl + t

        #代码补全::ctags

#配置tab键代码补全

"fill complete code with ctags

function! CleverTab()

if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'

return "\<Tab>"

else

return "\<C-N>"

endif

endfunction

inoremap <Tab> <C-R>=CleverTab()<CR>

#设置索引文件tags搜索路径(由ctags -R生成的)

"set tags?

set tags+=/root/aaa/bbb/tags

4) 一些必要的配置, 与IDE相似

        #关于view模式下的搜索

设置忽略大小写:set ic (取消设置:set noic)

设置高亮:set hl(取消设置:set nohl)

设置部分匹配结果:set is(取消设置:set nois)

设置语法标亮:syntax on(取消设置:syntax off)

        #配置文件

用户配置:~/.vimrc

系统配置:/etc/vimrc

        #更多用法查询

简单命令文档:vimtutor

详细命令文档:vim,F1

command模式查询命令文档:help command

        #设置文本编码,风格

编码格式: (:set fileencoding=utf-8)

系统文件风格:(set fileformat=unix ) ( mac(\r),dos(\n\r),unix(\n) )

5) view模式,内容搜索与遍历

搜索:/content

遍历: n-下一个

遍历: N-上一个

6) command模式,内容替换

整个文本内容静默替换: (:%s/from/to/g)

整个文本内容待确认替换: (:%s/from/to/gc)

查看文本内容出现的次数:(:%s/keyword//gn)

整个行内容静默替换: (:s/from/to/g)

7) view模式,删除d, 拷贝y, 改写c(进入insert模式)

删除光标处的字符:x

d(delete), y(copy), c(replace),如下

删除光标处的一个单词:dw,de,daw

删除选定的内容:ctrl + v == > d

删除光标处直到行尾的所有内容:d$

删除一行:dd

删除一个段落:dap

删除直到文本尾:dG

8) command模式, 多行拷贝(t-co-copy),移动(m-move)

拷贝第10行到光标所在行的下方:10t. (:10co.)(:10copy.)

将当前行拷贝到第10行下方:t10

拷贝当前行到下方:t.(相当于view模式的yyp)

将当前行拷贝到文件末尾:t$

将选中内容复制到文件开头:VG (view模式)==>(command模式) t0

拷贝10th~20th行的内容到光标所在行的下方:10,20t.

9) view模式,粘贴p(P)

插入上次删除/复制行的内容:p(本行下方), P(本行上方)

插入上次删除/复制的内容:p(光标后), P(光标前)

10) view模式,内容覆盖

开始覆盖一个字符:r

开始覆盖若干个字符:R

11) view模式,列操作(n+1列)

列插入: ctrl + v + nj + i + content

列修改: ctrl + v + nj + caw

列删除:ctrl + v + nj + daw

12) view模式,控制缩进

右移动单行:>>

左移动单行:<<

右移动10行:>10>

左移动10行:<10<

自动缩进整个文本: =G

13) view模式,撤销之前的操作

撤销上次的操作:u, (反撤销:ctrl +r)

撤销对这一行的操作:U

14) command模式,保存, 退出

另存为新文件: (:w filename)

退出并放弃所有的更改:":q!"

退出并保存所有的更改:":wq"

有更改就保存,无更改就退出:":x"

15) command模式,TAB补全

TAB命令补全

TAB参数补全

16) view模式,脱离鼠标, 光标直接移动到要去的地方

        #字符

光标移动一个字符的距离:k(上),j(下),h(左),l(右)

        #单词

光标移动一个单词的距离:w(下一个单词的开头), b(上一个单词开头), e(下一个单词的末尾)

        #行

光标移动到行首:0

光标移动到行第一个非空字符:^

光标移动到行尾:$

        #文件

光标移动到文档头:gg

光标移动到某行: nG

光标移动到文档尾:G

        #搜索前进

光标移动到该行的某个单词 (view模式):f{char}

光标在单词中间游动:gD(gd) + n(N) (*)

        #配对保留字

匹配的括号,预编译符号#:%

        #定义方法

在函数定义将之间游走:[[ (上一个)

在函数定义将之间游走:]] (下一个)

        #移动位置信息

显示文件,光标信息: ctrl + g

17) view模式,录制并使用可重复回放的宏(神操作)

重复上一次的操作: . (view模式)

宏录制开始:qa(view模式)

宏录制结束:q(view模式)

查看录制好的宏:reg a(command模式)

回放宏a一次:@a (view模式)

回放录制的结果10次:10@a (view模式)

18) view模式,内容大小写切换

字母大小写切换:~

单词转小写:guaw

单词转大写:gUaw

行大小写切换:g~~

行转大写:gUU

行转小写:guu

段落转大写:gUap

段落转小写:guap

19) view模式,数值计算

数值加1: ctrl + a

数值减1: ctrl + x

数值加0x10: 0x10 + ctrl + a

数值减0x10: 0x10 + ctrl + x

数值加10: 10 + ctrl + a

数值减10: 10 + ctrl + x

数值加010: 010 + ctrl + a

数值减010: 010 + ctrl + x

20) command模式,执行shell命令

在vim中启动一个shell: shell

在vim中使用shell执行一条命令: !{cmd}

在 vim中使用shell执行一条命令,并把其stdout插入到光标下方: r !{cmd}

将vim中的内容作为shell命令stdin, 执行一条命令: [range]write !{cmd}

将vim中的内容过滤: [range]!{filter}

命令回溯: up,down

读取文件内容到vim缓冲区: r filepath

21) command模式,在一定行范围内执行命令

打印3th行:3p

打印最后一行:$p

打印所有的行:%p

打印当前行到文件尾: . , $ p

打印2th~5th行:2,5p

打印选中的2th~最后一行: 2G + VG (view模式)==>(command模式) p

打印模式匹配范围内的:/<html>/+1,/<\/html>/-1p

22) command模式, global搜索并操作含特殊内容行:g/{patern}/[range][cmd]

收集所有含有特殊内容的行: g/var

删除所有含有'var'的行: g/var/d

将3-10行内含有'var'内容的行删除:g/var/3,10d

23) command模式, 对选中内容进行操作

选中多行到新文件: (ctrl + v 选中多行; :’<,’>w filename)

对选中内容进行排序: (ctrl + v 选中多行; :’<,’>sort)

24) view模式==>insert模式

在光标处插入字符:i(进入insert模式)

在光标后插入字符:a(进入insert模式)

在行首插入字符:I(进入insert模式)

在行尾插入字符:A(进入insert模式)

在光标上插入一行:O(进入insert模式)

在光标下插入一行:o(进入insert模式)


网站公告

今日签到

点亮在社区的每一天
去签到