vi/vim

跳到文件尾:1,G  2, :$ 

跳到文件头: 1, gg  2, :1

跳到指定的行: :n

查看文件编码:$ :set fileencoding

:set fileencoding=utf-8

显示当前文件名:   :f  或者 ctrl +G

显示文件当前路径:    :pwd 或者 :!pwd (命令模式下执行shell命令pwd会遮挡文本,不建议使用)

光标如何回到上一次位置: '' (两个单引号) 或者 ctrl + 0  或者ctrl + i

选定: v

vim已经启动 输入 :e file 可以再打开一个文件,并且此时vim里会显示出file文件的内容。 3.同时显示多个文件: :sp //水平切分窗口 :vsplit //垂直切分窗口

在文件之间切换: 1.文件间切换 Ctrl+6 //两文件间的切换 :bn //下一个文件 :bp //上一个文件 :ls //列出打开的文件,带编号 :b1~n //切换至第n个文件 对于用(v)split在多个窗格中打开的文件,这种方法只会在当前窗格中切换不同的文件。 2.在窗格间切换的方法 Ctrl+w+方向键——切换到前/下/上/后一个窗格 Ctrl+w+h/j/k/l ——同上 Ctrl+ww——依次向后切换到下一个窗格中;关闭窗口: ctrl+w+o

统计某关键字出现的次数:

:%s/key/&/gn

永久显示行号:

$ vim   ~/.vimrc

打开后添加set  nu,保存退出

取消行号显示:

:set  nonu

大小写检索:默认是区分大小写的,

:set ignorecase 或者 :set ic

恢复区分大小写:

:set noignorecase 或者 :set noic

单次关键字查询不区分大小写:

/search-textc

将当前文件[或者部分]内容复制到另外一个文件中

比如:把test1.txt第一行到第五行复制到 ~/test2.txt(会覆盖test2.txt原内容)

vi test1.txt esc命令行模式下

:1,5 w ~/test2.txt

把test1.txt第一行到第五行追加到到 ~/test2.txt

:1,5 w>> ~/test2.txt

同一个文件内的复制

 命令模式下执行shell命令

:!cmd

在windows下编辑的脚本在linux系统下执行$ sh -x tmp.sh

+log_dir=$'/tmp '

原因:windows下以“ ”作为换行,unix/linux下以“ ”作为换行。$ cat -A tmp.sh可以看到隐藏的符号。

解决方法:在命令模式下

1) :set fileformat=unix

2) :%s/^M$//g

:w

^M 注意要用 Ctrl + V Ctrl + M 来输入

3) tr -d ' ' < tmp.sh > result.sh  (注:将tmp.sh作为输入用tr处理,再输出到result.sh中)

4) $ dos2unix filename

5) $ sed -i ’s/^M//’ tmp.sh   (注:-i 直接在源文件中修改)

从当前光标处,n向上搜索,N向下搜索

?keyvalue

从当前光标处,n向下搜索,N向上搜索

/keyvalue

vi中怎么搜索复制出来的字符串。停留在要查找的单词的任意字母上面

shift+*

或者 让光标停留在单词的第一个字母上, 然后输入yw拷贝该单词, 然后输入 / (Ctrl + R) 0 (即 /”0),回车, 就查找到了第一个匹配的单词, 并且可以通过 n  或  N 进行上一个或下一个的匹配。

Ctrl + r 是指使用寄存器 , 你会发现先输入/ , 然后输入 Ctrl + r , 会立刻变为 “ , 即寄存器的前缀, 然后 ”0 就可以理解了吧? 合起来就是 /“0, 就是查找刚才复制的那个单词, 不懂的请查看上一个帖子:

http://blog.csdn.net/ballack_linux/article/details/53078836

对文本按行排序:

:sort

删除替换:

:[range]g/<pattern>/cmd

[range]代表范围,可以指定(eg.  :1,3g/linux/c)也可以不用指定(eg.  :g/linux/c)

cmd有很多,比如d,删除命令;c,删除并且进入insert模式;s,替换命令

如g/test/s/aaa/bbb/ 在文中查找包含test的行,并且把该行中的aaa替换成bbb,也可以把aaa省略,
g/test/s//bbb/,这时候表示的是把test替换成bbb指令

1. 要查找相同的两行,先将内容排序,然后查找前一行等于后一行者
:sort
/^(.+)$ 1

2. 删除重复行(先排一下序):
:sort
:g/^(.+)$ 1/d 

vi/vim 删除:一行, 一个字符, 单词, 每行第一个字符 命令

x        删除当前光标下的字符
dw       删除光标之后的单词剩余部分。
d$       删除光标之后的该行剩余部分。
dd       删除当前行。

c        功能和d相同,区别在于完成删除操作后进入INSERT MODE
cc       也是删除当前行,然后进入INSERT MODE

设置tab键为4个空格,且自动对齐
$vi /etc/vim/vimrc
set ts=4
set expandtab
set autoindent

 翻页:

CTRL-F 向前一页 CTRL-B 向后一页

ta 跳到下一个a 前面
fa 跳到下一个a

num% 调到百分之num

num| 跳到第几列

CTRL-E 向下一行
CTRL-Y 向上一行

vim 130 cmd

字符乱码:

~/.vimrc 文件中添加以下内容:
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936

JSON格式化

command! JsonFormat :execute '%!python -m json.tool'
 | :execute '%!python -c "import re,sys;chr=__builtins__.__dict__.get("unichr", chr);sys.stdout.write(re.sub(r"\u[0-9a-f]{4}", lambda x: chr(int("0x" + x.group(0)[2:], 16)).encode("utf-8"), sys.stdin.read()))"'
 | :set ft=javascript
 | :1

打开json文件:

:JsonFormat

@2020-05-07 20:05:59

vim插入模式下打出特殊字符:

在插入模式下,按CTRL+V会显示^,然后按特殊按键可以输入特殊字答符
如CTRL+V,出现^,按F1输入表示<F1>键的特殊字符

^A用脚本awk或python可以把分隔符设置为'x01',在vim中选中时,用ctrl+a来表示这个分隔符。

^R   CTRL+V,CTRL+r

恢复.swp文件:vim -r xxxx 进去再 :wq 退出编辑模式,改文件已经回复可编辑状态,再 rm -rf .xxxx.swp 删除掉隐藏文件后继续编辑源文件

原文地址:https://www.cnblogs.com/guxuanqing/p/4889828.html