GNU/Linux操作系统学习 09.VIM编辑器

第9章 VIM程序编辑器

1. 一般命令模式

移动
方向移动
  • hjkl 左下上右方向键
  • 30 + 方向键向某个方向移动30次
水平移动
  • 0移动到一行最前面 ^移动到一行第一个非空白字符
  • $移动到一行最后面 g_移动到一行最后一个非空白字符
  • w 移动到下一个单词开头 b移动到上一个单词的开头 e移动到下一个单词结尾 (W/B/E以空白符为分隔符)
  • f + g移动到一行的下一个g字母处 F + g反向移动到一行的g字母处
  • t + g移动到一行的下一个g字母前 T + g反向移动一行的下一个字母g前
  • ; 移动到下一个该字母 ,移动到上一个该字母
  • 30 + space 向后移动30个字符
垂直移动
  • ctrl + f下移动一页 ctrl + b上移动一页 (d/u移动半页)
  • zz将当前行移动到中央 zt 移动当最上 zb 移动到最下·
  • H / M / L 移动到屏幕的上中下行
  • +/-下上移动一行
  • G 移动到最后一行 gg移动到第一行 3G 移动到第3行
  • 30 + enter 向下移动30行
  • ctrl + o移动到上一个位置
查找
  • /word 向下查找word ?word向上查找word
  • n / * 重复前一个查找动作 N / #反向进行前一个查找动作
  • */# 对光标所在单词进行搜索
替换
  • :[range] s/{pattern}/{string}/[flags] range 表示范围 pattern表示正则表达式 string表示替换成的字符串(可忽略) flags表示模式(g 全局 c 确认选项 n只统计匹配次数)
  • :20,30 s/word1/word2/g(c)在20与30行间将word1替换成word2,有c则会提示确认
  • :1,$ s/word1/word2/g(c)在第一行到最后一行进行上述动作
  • :% s/word/word/g(c) 全局替换
文本对象
  • 操作模式 : [number]<action:d/c/y>[text object]
  • d : 删除 c : 修改 y : 复制
  • action i|a key
  • i 在key 的范围内不包括空格 a 在key的范围内包括空格
  • key: w 单词 s 句子 p 段落 其他配对字符如{}, [], <>, " 等

  • 举个例子 d (同理 y c 适用)
  • dd删除光标所在一行 30dd 剪切光标在内的向下30行 d1G / dgg 剪切光标所在到第一行 dG 剪切光标所在到最后一行
  • d$ 删除光标到行最后一个字符 d0 删除光标前到行第一个字符 dtk 删除直到k字符
  • diw / de 删除单词 daw / dw 删除单词包括后面的空白字符
删除
  • x向后删除一个字符 30x 包括光标向后删除30个字符 30X 不包括光标向前删除30个字符
  • s 删除一个字符进入插入模式 30s 删除30个字符进入插入模式 S 删除一行进入插入模式
  • J 光标所在行与下一行结合成同一行
粘贴
  • p 在光标下一行粘贴 P 在光标上一行粘贴
  • :r filename 将文件内容追加到光标所在行后面 :r! echo % 打印当前文件名 :r! echo %:p 打印当前路径名
  • 插入模式:set paste/nopaste解决 ctrl+v 因为设置自动缩进产生混乱问题
  • 插入模式ctrl + R + [寄存器名字] 粘贴对应内容
寄存器
  • ["regname]<action> 针对某个寄存器进行相应操作
  • "" : 默认存储d/y/x的内容 "0 : 只存储y的内容 "% 当前文件名 ". 上次插入的文本 "[a-z] a-z寄存器
  • "+ : 系统剪贴版 通过:echo has('clipboard') 查看是否支持 :set clipoard=unnamed 设置系统剪贴板为无名寄存器
  • :reg a-z 查看某个寄存器中的内容
宏与批量执行
  • q[a-z] 开始录制的命令存储在 [a-z]的寄存器中 / 结束录制 @[a-z] 回放命令
  • 通过v选择多行后 :normal @[a-z] 作用于多行 或者 :normal action 比如A$ 在行为插入$ 进行批量行处理
操作
  • u 撤销一次动作
  • ctrl + r 前进一次动作
  • . 重复上一个操作

2. 编辑模式

模式转换
  • i 在光标前插入 I 在所在行第一个非空格前插入
  • a 在光标后插入A 在所在行最后一个字符后插入
  • o 在光标下一行处插入一行 O上一行处插入新的一行
  • r 替换光标所在字符一次 R 一直替换光标所在字符直到退出
  • gi快速移动到上一次编辑的地方
  • ctrl + c 或者 ctrl + [ 退出编辑模式
编辑快捷键
  • ctrl + h删除上一个字母
  • ctrl + w删除上一个单词
  • ctrl + u删除一行
  • 只在shell下作用的快捷键

  • ctrl + f后移光标 ctrl + b前移光标
  • ctrl + e移动到结尾ctrl + a移动到开头
关键词补齐
  • ctrl + x 进入补齐菜单(第一步)
  • ctrl + n/p 文件内容补齐 (也可以作为选择匹配的方向键)
  • ctrl + f 文件名补齐
  • ctrl + o 全能补齐

3. 命令模式

保存与退出
  • :w 写入:w! 强制写入
  • :q 退出 :q! 强制退出
  • :wq 保存退出 :wq! 强制保存退出 ZZ 修改后保存退出 没修改直接退出
  • :w filename 另存为另一个文件 :20,30 w filename 将20行到30行的内容另存为另一个文件
可视区块
  • v 字符选择 V 行选择 ctrl + v 矩形选择
  • y 复制 d 删除 p粘贴
多窗口多文件编辑
多文件
  • $ vim file1 file2 (-O 多窗口) 打开多个文件 :e filename 打开或新建另外一个文件
  • :n / bnext / next 编辑下一个文件 :N / bpre / last 编辑上一个文件 b 1 跳转到第1个buffer中
  • :files 列出所有编辑中的文件
多个窗口
  • :h window-resize 查看调整窗口文档
  • :sp横向划分窗口 :sp filename 将filename打开或新建
  • :sv垂直划分窗口 :sv filename 将filename打开或新建
  • ctrl + w + : hjkl 方向键切换当前窗口 HJKL 方向键移动当前窗口 w 循环切换当前窗口
多标签页
  • :h tabpage 查看tabpage文档
  • :tabnew / tabe filename 在新标签页中打开文件
  • :tabc 关闭当前标签页 :tabo 关闭其他标签页
  • ctrl + w + T 移动当前窗口到新的标签页
  • [N]gt 切换[第N个]下一个标签页 gT 切换上一个标签页
其他操作
  • ctrl + p 返回上一个命令
  • :help 查询帮助文档
  • :! command 暂时退出到执行command
  • :e! 重新加载文档

4. 配置

缓存
  • 修改文件时会建立.filename.swp文件作为缓存
  • 出现意外终止情况,会自动读取文件来进行以下恢复操作:

  • O 只读打开文件
  • E 正常方式打开文件
  • R 恢复缓存文件(恢复且保存后需要手动删除缓存文件)
  • D 删除缓存文件
  • Q / A 退出
记录和设置
  • ~/.viminfo 记录文件的操作 /etc/.vimrc 记录整体vim的环境设置 ~/.vimrc 账户的设置
  • "为注释 :source ~/.vimrc 令配置生效
  • :set all / :h option-list 查看所有属性配置

  • :set tabstop=4 设置tab格子数
  • :set nu 显示行号
  • :set nonu 取消行号
  • :set hls 显示搜索高亮
  • :set incsearch 显示搜索过程高亮
  • :set autoindent 设置自动缩进
  • :set paste / nopaste
  • :syntax on 打开标亮
映射
  • imap/nmap/vmap 递归映射 inoremap/nnoremap/vnoremap 非递归映射
  • 举个例子 inoremap <C-W>h <C-h> 将移动窗口按键简化

5. vim的其他注意事项

中文编码问题
  • Linux 系统支持的语言 配置在/etc/locale.conf中
  • Bash 语言与 LANG 和 LC_ALL 有关
  • 文本编码要与GNOME下的终端字符编码要一致
  • 配置的名称 为LANG/export LC_AL= en_US.[编码] / zh_CN.[编码]
  • ascii / gb2312 / gbk / gb18030 范围由小到大
  • big5 表示繁体中文, utf8兼容ascii
DOS与UNIX环行符转换
  • 换行符号 DOS : “^M " ( C R L F ) U N I X : " "(CRLF) UNIX :" "(CRLF)UNIX:"”(LF)
  • 比如运行脚本出现问题 : “坏的解释器: 没有那个文件或目录”
  • $ dos2unix/unix2dos [-kn] file [newfile]
  • -k 保留文本的时间格式
  • -n 保留源文件将新文件输出为newfile(推荐加上-n)
  • $ file filename 查看文本以什么换行和编码方式
语系转换
  • $ iconv --list 显示iconv支持的语系
  • $ iconv -f type -t newtype filename [-o newfile] 将type转换成newtype
  • -o 保留源文件将新文件输出为newfile(推荐加上-o)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值