开启辅助访问 切换到窄版

打印 上一主题 下一主题

计算机科学研究专家陶贤斌带您入门Linux中的vim

[复制链接]
作者:wolongshizhu 
版块:
嵌入式操作系统 linux 发布时间:2020-2-25 22:24:24
16780
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Vim一直被认为是一种非常高效的文本编辑器,但是对于普通用户来说,很难在入门的时候就体会到Vim的所谓高效性。Vim 是 UNIX 文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff),语法高亮,全面的帮助系统,本地脚本(Vimscript),和便于选择的可视化模式。 Vim 专注于键盘操作,它并不是像 nano 或 pico 一样的简单编辑器。Vim 需要花时间来学习,并值得花上更多的时间来掌握。所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是 vim 编辑器。
请大家看一下vim 键盘图:
Vim 键盘图

Vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。Vim是从 vi 发展出来的一个文本编辑器。代码编辑、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。 连 vim 的官方网站自己也说 vim 是一个程序开发工具而不是文字处理软件。
vi/vim 的使用:
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
i 切换到输入模式,以输入字符;
x 删除当前光标所在处的字符;
: 切换到底线命令模式,以在最底一行输入命令。
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
输入模式
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
字符按键以及Shift组合,输入字符;
ENTER,回车键,换行;
BACK SPACE,退格键,删除光标前一个字符;
DEL,删除键,删除光标后一个字符;
方向键,在文本中移动光标;
HOME/END,移动光标到行首/行尾;
Page Up/Page Down,上/下翻页;
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线;
ESC,退出输入模式,切换到命令模式。
底线命令模式:
在命令模式下按下“:”(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
q 退出程序;
w 保存文件;
按ESC键可随时退出底线命令模式。
Vi/vim命令大全
"/
" 常用指令收集
/
" 系统时间
" :map  a=strftime("%c")
" :s/__date__/\=strftime("%c")/
"/**\
" 基础命令
"/**\
" ctrl+q 可以联合复制,粘贴
" ctrl+w+j ctrl+w+k (:bn :bp :bd)
" '. 它移动光标到上一次的修改行
" `. 它移动光标到上一次的修改点
" . 重复上次命令
"  : 依次沿着你的跳转记录向回跳 (从最近的一次开始)
"  : 依次沿着你的跳转记录向前跳
" ju(mps) : 列出你跳转的足迹
" :history : 列出历史命令记录
" :his c : 命令行命令历史
" :his s : 搜索命令历史
" q/ : 搜索命令历史的窗口
" q: : 命令行命令历史的窗口
" g ctrl+g 计算文件字符
" {,} 前进至上一段落前进至后一段落
" gg,G(2G) 文件首
" gd dw gf ga(进制转化)
" gg=G 全篇自动缩进 , =G 单行缩进
"* ci[ 删除一对 中的所有字符并进入插入模式
"* ci( 删除一对 中的所有字符并进入插入模式
"* ci< 删除一对  中的所有字符并进入插入模式
"* ci{ 删除一对 {} 中的所有字符并进入插入模式
"* cit 删除一对 HTML/XML 的标签内部的所有字符并进入插入模式
"* ci” ci’ ci` 删除一对引号字符 (” 或 ‘ 或 `) 中所有字符并进入插入模式
"
"* vi[ 选择一对 中的所有字符
"* vi( 选择一对 中的所有字符
"* vi< 选择一对  中的所有字符
"* vi{ 选择一对 {} 中的所有字符
"* vit 选择一对 HTML/XML 的标签内部的所有字符
"* vi” vi’ vi` 选择一对引号字符 (” 或 ‘ 或 `) 中所有字符
" crl+] 函数原型处 crl+t 回 ( ctags )
" ctl+p 自动补全( 编辑状态 )
" :X 加密保存( 要输入密码 )
" ? / (N n)
" f(F,t) 查找字符
" w(e) 移动光标到下一个单词.
" 5fx 表示查找光标后第 5 个 x 字符.
" 5w(e) 移动光标到下五个单词.
" b 移动光标到上一个单词.
" 0 移动光标到本行最开头.
" ^ 移动光标到本行最开头的字符处.
" $ 移动光标到本行结尾处.
" H 移动光标到屏幕的首行.
" M 移动光标到屏幕的中间一行.
" L 移动光标到屏幕的尾行.
" c-f (即 ctrl 键与 f 键一同按下)
" c-b (即 ctrl 键与 b 键一同按下) 翻页
" c-d (下半页) c-u(上半页) c-e (一行滚动)
" zz 让光标所在的行居屏幕中央
" zt 让光标所在的行居屏幕最上一行
" zb 让光标所在的行居屏幕最下一行
" 在 vi 中 y 表示拷贝, d 表示删除, p 表示粘贴. 其中拷贝与删除是与光标移动命令
" yw 表示拷贝从当前光标到光标所在单词结尾的内容.
" dw 表示删除从当前光标到光标所在单词结尾的内容.
" y0 表示拷贝从当前光标到光标所在行首的内容.
" d0 表示删除从当前光标到光标所在行首的内容.
" y$(Y) 表示拷贝从当前光标到光标所在行尾的内容.
" d$(D) 表示删除从当前光标到光标所在行尾的内容.
" yfa 表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
" dfa 表示删除从当前光标到光标后面的第一个a字符之间的内容.
" s(S),a(A),x(X),D
" yy 表示拷贝光标所在行.
" dd 表示删除光标所在行.
" 5yy 表示拷贝光标以下 5 行.
" 5dd 表示删除光标以下 5 行.
" y2fa 表示拷贝从当前光标到光标后面的第二个a字符之间的内容.
" :12,24y 表示拷贝第12行到第24行之间的内容.
" :12,y 表示拷贝第12行到光标所在行之间的内容.
" :,24y 表示拷贝光标所在行到第24行之间的内容. 删除类似.
" TAB 就是制表符, 单独拿出来做一节是因为这个东西确实很有用.
" > 输入此命令则光标后 5 行向右移动一个 tab.
" :5>>(>>>) :>>(>>>)5
" :12,24> 此命令将12行到14行的数据都向右移动一个 tab.
" :12,24>> 此命令将12行到14行的数据都向右移动两个 tab.
" :set shiftwidth=4 设置自动缩进 4 个空格, 当然要设自动缩进先.
" :set sts=4 即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
" :set tabstop=4 实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
" :set expandtab 在输入 tab 后, vim 用恰当的空格来填充这个 tab.
" :g/^/exec 's/^/'.strpart(line('.').' ', 0, 4) 在行首插入行号
" set ai 设置自动缩进
" 5ia 重复插入5个a字符
"/**\
" 替换命令
"/**\
" 替换文字 2009-02-34 ----> 2009-02-34 00:00:00
" :%s/\(\d\{4\}-\d\{2\}-\d\{2\}\)/\1 00:00:00/g
" :%s/^/heaser/ 在每一行头部添加header
" :%s/$/ender/ 在每一行尾部添加ender
" :s/aa/bb/g 将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
" :s/\/bb/g 将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词
" :%s/aa/bb/g 将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
" :12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
" :12,23s/^/#/ 将从12行到23行的行首加入 # 字符
" :%s/fred/joe/igc 一个常见的替换命令,修饰符igc和perl中一样意思
" s/dick/joe/igc则 对于这些满足条件的行进行替换
" :g/^\s*$/d 空行(空格也不包含)删除.
" :%s/\r//g 删除DOS方式的回车^M
" :%s/ *$// 删除行尾空白(%s/\s*$//g)
" :g!/^dd/d 删除不含字符串'dd'开头的行
" :v/^dd/d 同上,译释:v == g!,就是不匹配!
" :v/./.,/./-1join 压缩空行(多行空行合并为一行)
" :g/^$/,/./-j 压缩空行(多行空行合并为一行)
" :g/^/pu _ 把文中空行扩增一倍 (pu = put),原来两行间有一个空行,现在变成2个
" :g/^/m0 按行翻转文章 (m = move)
" :g/fred/,/joe/d not line based (very powerfull)

" :g/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表