首页 > 技术文章 > vim

zhuxiang1633 2020-02-07 13:36 原文

vim基础

进入vim编辑器

vim默认模式为normal模式

  • a,进入插入模式,定位到当前字母 后面,
  • A,进入插入模式,定位当当前行后面
  • i,进入插入模式,定位到当前字母前
  • I,进入插入模式,定位到当前行前面
  • o,进入插入模式,向下一行(open a line below)
  • O,向上插入

esc: insert->normal

命令模式(Command)

在normal模式下,输入:,进入命令模式

  • :wq,保存并退出
  • 分屏,:vs(vertical split), :sp(split)
  • :v,进入visual模式,可以进行文本选中,使用y复制,p粘贴
  • :% s/foo/bar/g, 全局替换

s:表示替换,%表示全文搜索,将foo替换成bar,g表示全局替换

  • :set nu 设置行号

查找替换

查找

在normal模式下,输入/ + 带查询的字符串

/word
# 输入n下一个

查询光标字符

# 输入 * / #

替换

:% s/string/string/[g,c,n]
# g:全局
# c:confirm
# n:查询个数

单行替换

# normal模式下, :s /str/newStr
:s /str/newStr

全局替换

# 每行只会替换一个
:%s /str/newStr

# 替换所有
:%s /str/newStr/g
替换指定行区间
模式下,Ctrl+P可以调出上次命令,Ctrl+N下一条
:10,20s /str/newStr/g

替换单词

# hello 会被替换, helloa不会被替换
:% s/\<hello\>/Hello/g  # 全局匹配,正则(单词hello),替换

如何快速纠错

insert模式

  1. 使用Ctrl+u:快速从当前字符删除到当前行开始
  2. Ctrl+w:快速删除上一个单词
  3. Ctrl+H:快速定位到上一个字符[normal]

ctrl+H:删除上一个字符[insert]

  1. gi:快速进入插入模式,并且定位到上次编辑的位置

vim移动

  1. hjkl,上下左右
  2. w/W,单词移动
  3. b/B,单词
  4. e/E,单词

代码高亮:syntax on

  1. 行内搜索,f{char},使用;进入下一个

  2. 水平移动,移动到行首,行尾,^/0

$,移动到行尾

  1. 垂直移动,(),{}
  2. 页面移动,gg/GG,文件开头,结尾

移动到页面Head,middle,lower

  1. 翻页,Ctrl+u,ctrl+f ,(upword,forward)

快速增删改查

快速删除字符,单词

  • x,字符
  • d,单词

daw,diw

多文件编辑

  • 打开多个文件
vim aa bb
  • 查看正在编辑的文件
:ls
  • 编辑某个文件
:b 1
:bpre
:bnext
  • 窗口
# 分割
:vs
:sp
# 切换
ctrl+w+w
ctrl+w+'hjkl'
:vs bb.txt  # 分割窗口编辑bb.txt
# 移动窗口
Ctrl+w+L

# 新开一个窗口,并打开文件
:vsp file
  • tab
:tabnew bb.txt  # 打开新标签页
# 切换
gt
tabc  # 关闭当前标签页中的所有窗口
tabo[only]  # 只保留当前标签页
:tabe[edit] file  # 在新标签中打开文件

选中

-v

vi[w,char]
# 
print('hello world')
vi'   # 选中单引号中的所有字符
# a = {'name':'',xxx}
ci{

# 选中整行
Shift+V
# 局部选中
v+方向键

赋值,粘贴

# 赋值
y
# 粘贴
p   -- 当选中整行(yy,V,dd)赋值到下一行
P   -- 当选中整行(yy,V,dd)复制到上一行
# 赋值当前行
yy

代码格式对其你

:set autoindent

:set paste ,粘贴代码是不乱

全选

gg + V + G

配置文件

配置文件

vim映射

什么以映射?把一个操作映射到另一个操作

normal模式下的映射

  1. 使用-代替x
:map - x
  1. 使用空格选中一个单词
:map <space> viw
  1. 使用Ctrl+d删除一行
:map <c-d> dd
set number
 
set tabstop=4



" 穘ormal模式下,非递归方式

nnoremap <c-d> dd " 删除行
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

" 插入模式
imap <c-d> <Esc>ddi  " 删除▒
imap <c-l> <Esc>Vyp<c-o> " 赋值一行
inoremap jj <Esc>`^  " 进入normal模式,同时光标定位到上次编辑的地方

" mommand
com! Fmtjson %!python -m json.tool

推荐阅读