归纳常用的Vi/Vim 文本编辑技巧,便于以后查阅。

一、把空格替换为换行

  :% s/ /\r/g

二、把空行删除

  :g/^$/d

三、vim以16进制打开和编辑文件

  先用vim以二进制格式打开需要编辑或查看的文件,不采用-b参数有时会导致转换错误。

    vim -b file-to-open.dat

  然后用xxd把文件转换成十六进制格式

    :%!xxd

  修改完成使用xxd把十六进制转换回二进制

    :%!xxd -r

四、vim删除一列

  光标放在列起始位置,然后CTRL+V, 移动光标到该列的末尾,按X键。删除多列时,向左/向右移动光标。

五、vim增加一列

  (1) 定位光标;(2) CTRL+V;(3) j (nj 多行) ;(4) shift+I;(5) 输入文本;(6) ESC;

六、在两个文档间复制

  (1)vi file_1 file_2      (2):sp 进入文档切换模式

(3):e file_x   打开多个文件         (4)CTRL+w 在 多个 文件 间切换

(5)在 file_1中 定位 光标,CTRL+v ,选择要复制的 内容,yy 复制           (6)在file_2中 选择同样 大小区域的内容,p 粘贴

  (7)保存

七、多行复制、多行粘贴和多行删除

在命令模式下,将光标移动到将要复制的首行处,按“nyy”复制n行;其中n为1、2、3……

在命令模式下,将光标移动到将要粘贴的行处,按“p”进行粘贴

在命令模式下,将光标移动到将要删除的行处,按“ndd”删除n行;其中n为1、2、3……

八、窗口分屏

先打开一个文件:vi file1

在打开的界面中,在命令模式下,输入:vsp file2, 即可实现双文件打开,如果再打开一个文件,同样输入:vsp file3

在不同文件之间切换:ctrl + w w

九、文件比较

1. 使用vim的比较模式打开两个文件:
             vim -d file1 file2
             或
             vimdiff file1 file2

2. 如果已经打开了文件file1,再打开另一个文件file2进行比较:

:vert diffsplit file2
             如果没有用vert命令,diffsplit则会分上下两个窗口。

十、编辑窗口关闭而文件未保存

当使用vi或vim打开文件时,为了防止意外,比如用vi开启文件后,没有退出,又在另一个终端里再次用vi或vim打开同一个文件;或者没有退出vi编辑器就直接shutdown关机或init 0关机了。

就会产生一个以.swp为后缀的文件。如果这些意外没有发生,这个.swp文件将被删除。可用vi -r 文件名的方式恢复文件。然后用rm删除以.swp为后缀的文件

十一、如何在vim中插入一列递增数字

先在要插入这样递增数列的地方插入一个全文不会重复出现的字母序列,比如我插入的是ZCC,然后输入命令
      :let i=0 | g/zcc/s//\=i/ | let i=i+1

十二、如何在固定pattern 后面增加新的 字符

例如 要在 所有 rand_gen_out_* 后面 加上 [8:0]

assign all_same = ((rand_gen_out_11==rand_gen_out_10)&&(rand_gen_out_10==rand_gen_out_9)&&(rand_gen_out_9==rand_gen_out_8)&&(rand_gen_out_8==rand_gen_out_7)&&
                          (rand_gen_out_7 ==rand_gen_out_6)&&(rand_gen_out_6 ==rand_gen_out_5)&&(rand_gen_out_5 ==rand_gen_out_4));

先选中要替换的字符所在行,然后使用命令:

:'<,'>s/\(rand_gen_out_[0-9]*\)/\1[8:0]/g

十三、撤销和反撤销

普通模式下  u 撤销 ctrl + r 反撤销

十四、统计查找字符串的数量

比如我有一个log文件,我文件里符合规则的字符是yes,我想查找这个abc.log文件中的yes字符数量,怎么查找呢,如下:

     :%s/yes//gn

十五、将文件里面的所有十进制数转成十六进制数

:%s/\d\+/\=printf("0x%x", submatch(0))

十六、将 一行数据(数据间有空格) 转成 一列数据

(1) :%s # #\r#g

(2)sed 's/[ ][ ]*/\n/g

(3):%s #\s\+#r\r#g

十七、在固定字符后 插入 空格

:%s#\(\a\)\@<=#\=repeat(' ',5)#g

vi 常用 文本编辑 技巧的更多相关文章

  1. SHELL脚本编程的常识和VI常用技巧

    来源:http://mprc.pku.edu.cn/mentors/training/TrainingCourses/material/ShellProgramming.HTM#_Toc3751808 ...

  2. vim(vi)常用操作及记忆方法

    vi(vim)可以说是linux中用得最多的工具了,不管你配置服务也好,写脚本也好,总会用到它.但是,vim作为一个“纯字符”模式下的工具,它的操作和WINDOWS中的文本编辑工具相比多少有些复杂.这 ...

  3. vi常用操作命令

    进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后 ...

  4. (转)vim(vi)常用操作及记忆方法

    vim(vi)常用操作及记忆方法 原文:https://www.cnblogs.com/doseoer/p/6241443.html vi(vim)可以说是linux中用得最多的工具了,不管你配置服务 ...

  5. vim常用操作技巧与配置

    vi是linux与unix下的常用文本编辑器,其运行稳定,使用方便,本文将分两部分对其常用操作技巧和配置进行阐述,其中参考了网上的一些文章,对作者表示感谢 PART1 操作技巧 说明: 以下的例子中  ...

  6. Linux入门学习笔记1:VI常用命令

    常用命令 yy 复制 p 黏贴 shift+v 多行选中 shift+ctrl+< 左移 shift+ctrl+> 右移 ndd 删除光标所在行及其后n-1行 i 进入编辑状态 esc 退 ...

  7. centos的vi常用用法

    centos的vi常用用法 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的 ...

  8. vi 常用命令行

    vi 常用命令行 1.vi 模式  a) 一般模式: vi 处理文件时,一进入该文件,就是一般模式了.  b) 编辑模式:在一般模式下可以进行删除,复制,粘贴等操作,却无法进行编辑操作.等按下‘i,I ...

  9. java与.net比较学习系列(1) 开发环境和常用调试技巧

    最近因为公司项目要由.net平台转到java平台的原因,之前一直用.net的我不得不开始学习java了,刚开始听到说要转java的时候很抗拒,因为我想专注在.net平台上,不过这样也并不完全是坏事,通 ...

随机推荐

  1. LeetCode 46 全排列

    题目: 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3 ...

  2. PAT B1029

    # PAT B1029 这道题主要有两个问题需要解决: 如何在不区分大小写的情况下判断第一个字符串中有哪些字符串没有在第二个中出现 如何确保同一个字符(不区分大小写)只输出一次,且英文均用大小写输出 ...

  3. HDU1171将多个不同价值不同数量的器材尽可能按等价值均分 第一份的价值尽可能的大 所以sum/2对第二份进行01背包 使其价值尽可能的大

    //hdu1171void solve(){ for(int i=1;i<=n;i++) { for(int j=W;j>=w[i];j--) { dp[j]=max(dp[j],dp[j ...

  4. python自学第12天 模块

    json , pickle模块 json,用于字符串和python数据类型间进行转换 pickle,用于python特有的类型和python数据类型间的进行转换 shelve 模块 是一个简单的k,v ...

  5. keil的51项目创建

    keil的51项目创建步骤: 工程创建: Project->New uVision Project 项目命名:如...test CPU->Atmel::AT89C51 文件创建: File ...

  6. 入门项目 A5-1 interface-bank 第三方接口1

    from db import db_handler # 提现接口 def withdraw_interface(name, money): # 定义提现接口,传入name与money参数 user_d ...

  7. 解决使用angular2路由后,页面刷新后报404错误。

    点击路由链接跳转页面是正常的,但是当刷新页面时就出现了404错误. 解决方法如下: 在app.module.ts中添加import: import {HashLocationStrategy,Loca ...

  8. Oracle之 dmp导入/导出、数据库操作等过程中的字符集问题

    影响Oracle数据库字符集最重要的参数是NLS_LANG参数. 它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言.地域和字符集),每 ...

  9. Binary Search Tree Learning Summary

    BST Definition BST is short for Binary Search Tree, by definition, the value of right node is always ...

  10. 框架tensorflow2

    TensorFlow 2 TensorFlow 激励函数 TensorFlow 添加层: 思考:matmul和multiply两种乘法的区别:http://www.soaringroad.com/?p ...