Chapter 8 文本编辑

8.1 vi & vim

vim

vi (visual)是一个经典且强大的文本编辑器,所有的UNIX-like都会内置vi

Vim (vi improved)是vi的升级版。其代码补全、编译及错误跳转等方便编程的功能特别丰富

yum -y install vim

Vim 有Normal, Visual, Insert 和 Command-line四种模式

8.1.1 普通模式

普通模式又称命令模式,通过按下功能按键进行编辑

  • 移动光标:

    hjkl(←↓↑→),以及数字0(Home),$(End)

    w 跳转到下个单词 b 跳转到上个单词

    f+字母 找到下一个该字母并跳转到此

    多次移动:

    30j (或30Enter或30↓),向下30行

    10Space (或10l或10→)向右10字符

    G(移动到最后一行)、20G(第20行),gg(即1G,第一行)

  • 翻页

    Ctrl+fbdu

    即 front back down up

    分别是向下一页(PgDn)、向上一页(PgUp)、向下半页、向上半页

  • 复制

    yy复制当前行

    yaw yank all word

    y4j 复制下四行 y8l复制右8格

    yfr 复制到下一个r为止的内容

  • 粘贴:

    p贴在后面(下面),P贴在前面(上面)

  • 删除:

    d 与 y 命令非常相似,可以配合hjkl, G, 0, $, f+字母 等使用

    例如 d8j, dfw

    dd删除当前行

    x向后删除,X向前删除,10x删除后面的10个字符

  • 撤销 uCtrl+r重做上一个动作

  • .重复前一个动作

8.1.2 插入模式

iIoOaArRc

  • c –change

    caw删除当前单词进入插入模式

    cc删除当前行进入输入模式

    c4j删除下4行进入输入模式

代码补全
Ctrl+x -> Ctrl+n 使用当前文件内的单词来补全
Ctrl+x -> Ctrl+f 使用当前目录的文件名来补全
Ctrl+x -> Ctrl+o vim根据扩展名使用内置策略来补全

8.1.3 可视模式

vV^V

选中之后可以使用y d c等复制、删除、改变

缩进:

  • 输入V进入可视行模式
  • <>向前或向后缩进

多行注释:

  • Ctrl+v进入可视块模式,移动光标选中要注释的行
  • 按I (insert)行首插入注释符(如#),如果插入空格则可以缩进
  • Esc

取消多行注释:可视块模式选中注释符号按d删除

8.1.4 命令行模式

普通模式按下:, /?进入命令行模式

:
:set nu / nonu 是否显示行号
:set autoindent / noautoindent 是否自动缩进,即继承上一行的缩进量
:wq 保存退出
:q! 强制退出
:w [filename] 另存为
:r [filename] 将另外的文件读取到游标所在行后面
:n1,n2 w [filename] 将两行之间的内容另存为新文件
:! [command] 执行命令,例如:! ls/home
查找与替换
/关键字 回车 查找下一个,按n继续查找下一个,N查找上一个
?关键字 回车 查找下一个,按n继续查找下一个,N查找上一个
:n1,n2s/word1/word2/g 在n1行n2行之间替换word1为word2
:%s/word1/word2/gc 全文寻找和替换,且替换前询问(confirm)
分屏
:sp [filename] 分屏打开文件,默认是当前文件
Ctrl+W 管理窗口,再按 j,k或方向键切换窗口,q关闭

8.2 编码转换

  • iconv -f 原编码 -t 新编码 filename [-o newfile]

  • iconv -l

    列出所有支持的编码

8.3 换行符问题

DOS下的换行符是CRLF (^M$),而UNIX换行符是LF ($),这就导致Windows下写的文本文件拿到Linux里会出问题。

  • dos2unix [-kn] file [newfile]

    dos2unix test.txt

    -k 不改变mtime

    -n 输出到新文件,保留旧文件 dos2unix -n old.txt new.txt

类似的,还有unix2dos命令,将unix换行符改为dos换行符