vim是对vi的扩展,文中很多操作都是vi通用的
vi是区分大小写的命令,即g和g是不同的命令
不同模式的快捷键不同的模式分为普通模式编辑模式命令模式
一般模式用于文件内部的操作,编辑模式用于输入创建等,指令模式用于文本文件的操作
常用操作
开始编辑或按esc进入正常模式
键
效果
a,I,r,o,a,I,r,o
进入编辑模式
h,后退空间
向左移动
l,空格
向右移动
j
下移
K
向上移动
0,
移动到行首
$
移动到行尾时,1表示当前行的行尾,2表示当前行中下一行的行尾
b
将前缀向前移动到每个单词
e
每个单词的后缀向后移动
w
每个单词后移一个字符
h
移动到屏幕顶部非空白字符
米
移动到画面中央空白以外的文字
l
移动到屏幕底部非空白字符
g
移动到文档的最后一行
gg
移动到文档的第一行
v
进入光标模式,根据移动键选择多行
Ctrl f
翻页向下
Ctrl b
翻页
u
撤消上一次操作
“`
返回上一次编辑的位置
dw
删除这个单词后面的内容
dd
删除光标的当前行
德格
删除光标后的所有字符
d$
删除本行光标后面的内容
d0
删除本行光标之前的内容
y
复制当前行时,将复制换行符
yy
复制当前行的内容
yyp
将当前行复制到下一行。 此副本不会放置在剪贴板上
纽约
复制当前开始的n行
p,p,
粘贴
ddp
当前行和下一行交换位置
j
合并行
Ctrl r
重复上次的动作
Ctrl z
暂停并结束
ZZ
保存并离开
xp
把文字后面的向前交换
~
交换当前光标位置的大小写,并将其移动到行的右边位置,直到光标无法移动为止
光标详细操作
按钮
效果
Ctrl e
向下滚动
Ctrl b
翻页
b
将前缀向前移动到每个单词
b
将前缀向前移动每个单词,忽略标点符号
e
每个单词的后缀向后移动
e
每个单词向后移动,忽略标点符号
w
每个单词后移一个字符
w
每个单词后移一个字符,忽略标点符号
h
移动到屏幕顶部非空白字符
米
移动到画面中央空白以外的文字
l
移动到屏幕底部非空白字符
g
移动到文档的最后一行
gg
移动到文档的第一行
(
光标来到文末
)
将光标悬停在桌面上
{
将光标置于段落的开头
}
光标位于段落的末尾
nG
光标移动到n行的开头
n$
光标移动到n行的末尾
n
在光标下移动n行
n-
将光标移动n行
查找命令
指令
效果
*
向下查找同一光标的字符
#
向上查找同一光标的字符
/代码
找代码之类的东西,向后看
? 代码
找代码之类的东西,往前走
n
寻找下一个地方
n
找前面的地方
ma
在光标处制作标记a的话,可以使用26个标记a~z )。
` a
移动到标记a
d`a
删除从当前位置到标记a的内容
:marks
显示所有标签
指令模式
指令
效果
:q
一般退出
:q!
退出也不保存
:wq
p>
保存退出
:w filename
另存为 filename
:jumps
历史编辑文档记录
:set nu
设置行号显示
:set nonu
取消行号显示
:set
显示设置参数
:set autoindent
自动缩排,回车与第一个非空格符对齐
:syntax on/off
根据程序语法鳗鱼硬币显示
:set highlight
鳗鱼硬币设置查看
:set hlsearch
查找代码鳗鱼硬币显示
:nohlsearch
暂时关闭鳗鱼硬币显示
:set nohlsearch
永久关闭鳗鱼硬币显示
:set bg=dark
设置暗色调
:set bg=light
设置亮色调
屏幕翻滚
按键
效果
Ctrl+f
向文件尾翻一屏幕
Ctrl+b
向文件首翻一屏幕
Ctrl+d
向文件尾翻半屏幕
Ctrl+u
向文件首翻半屏幕
插入命令
按键
效果
i
在光标前
I
在当前行首
a
在光标后
A
在当前行尾部
o
在当前行下新开一行
O
在当前行上新开一行
r
替换当前字符
R
替换当前行及后面的字符,直到按 esc 为止
s
从当前行开始,以输入的文本替代指定数目的字符
S
删除指定数目的行,并以输入的文本替代
ncw,nCW
修改指定数目 n 的字符
nCC
修改指定数目 n 的行
删除命令
按键
效果
ndw,nDW
删除光标开始及其后 n-1 个字符
dw
删除这个单词后面的内容
dd
删除光标当前行
dG
删除光标后的全部文字
d$
删除本行光标后面的内容
d0
删除本行光标前面的内容
ndd
删除当前行,以及其后的 n-1 行
x
删除一个字符,光标后
X
删除一个字符,光标前
Ctrl+u
删除输入模式下的输入的文本
多窗口模式
指令
效果
:split
创建新窗口
Ctrl+w
切换窗口
Ctrl-w =
所有窗口一样高
Ctrl-w + 方向键
多窗口视图切换
多文件编辑
指令
效果
:args
列出当前编辑的文件名
:next
打开多文件,使用 nNext) previous)
:file
列出当前打开的所有文件
vim 自定义技巧
复制粘贴取消缩进
:set paste
进入 paste 模式以后,可以在插入模式下粘贴内容,不会有任何变形这个参数做了这么多事:
textwidth设置为0
wrapmargin设置为0
set noai
set nosi
softtabstop设置为0
revins重置
ruler重置
showmatch重置
formatoptions使用空值
下面的选项值不变,但却被禁用
lisp
indentexpr
cindent
绑定快捷键来激活 / 取消 paste 模式
:set pastetoggle=<F11>
出现粘贴换行符错位,设置一下 .vimrc
” this can change way of paste words
:set paste
” default tabstop=8
:set tabstop=4
” use keyboard F11 to change paste mode
:set pastetoggle=<F11>
vim 缩进
Normal Mode 下,命令>>将对当前行增加缩进,而命令<<则将对当前行减少缩进在命令前使用数字,来指定命令作用的范围
5<<
在 Insert/Replace Mode 下
Ctrl-Shift-t可以增加当前行的缩进Ctrl-Shift-d则可以减少当前行的缩进使用0-Ctrl-Shift-d命令,将移除所有缩进
需要注意的是,当我们输入命令中的 “0” 时,Vim 会认为我们要在文本中插入一个 0,并在屏幕上显示输入的“0”;然后当我们执行命令 0-Ctrl-Shift-d 时,Vim 就会意识到我们要做的是减少缩进,这时 0 会就会从屏幕上消失
vim tab 缩进
tab 缩进宽度默认为 8 个空格
我们可以使用以下命令,来修改缩进宽度
:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab
tabstop: 表示一个 tab 显示出来是多少个空格的长度默认 8softtabstop: 表示在编辑模式的时候按退格键的时候退回缩进的长度当使用 expandtab 时特别有用。shiftwidth: 表示每一级缩进的长度一般设置成跟 softtabstop 一样。 当设置成 expandtab 时缩进用空格来表示noexpandtab 则是用制表符表示一个缩进expandtab 选项,用来控制是否将 Tab 转换为空格, 但是这个选项并不会改变已经存在的文本,如果需要应用此设置将所有 Tab 转换为空格,需要执行:retab!
vim 自动缩进
cindent:set cindent
vim 可以很好的识别出 C 和 Java 等结构化程序设计语言,并且能用 C 语言的缩进格式来处理程序的缩进结构
smartindent:set smartindent
在这种缩进模式中,每一行都和前一行有相同的缩进量,同时这种缩进形式能正确的识别出花括号,当遇到右花括号(}),则取消缩进形式。此外还增加了识别 C 语言关键字的功能。如果一行是以 #开头的,那么这种格式将会被特殊对待而不采用缩进格式。
autoindent:set autoindent
在这种缩进形式中,新增加的行和前一行使用相同的缩进形式
显示隐藏符号
默认不显示 :set nolist显示 :set invlist” normal is :set nolist | show hide is :set invlist
:set nolist
使用 vim 寄存器
使用 vim 寄存器 “+p 粘贴
根本不用考虑是否自动缩进,是否 paste 模式,直接原文传递
如果想保存原寄存器中内容而同时增加新的内容,就要在 yy 前增加标签标签以双引号开始,跟着的是标签名称,可以是数字 0-9,也可以是 26 个字母
显示所有寄存器内容
:reg
注意两个特殊的寄存器:* 和 +
这两个寄存器是和系统相通的,前者关联系统选择缓冲区,后者关联系统剪切板通过它们可以和其他程序进行数据交换
若寄存器列表里无 * 或 + 寄存器,则可能是由于没有安装 vim 的图形界面所致sudo apt-get install vim-gnome
设置 vim 永远显示行号
修改 vim 的配置文件加入 set nu
vi ~/.vimrc
然后输入
set nu
当然也可以输入其他配置类似
set nonu
syntax on
vimrc 常用配置
设置行号
set nu
设置自动缩进
set autoindent
设置tab占n个字符
set tabstop=n
设置以空格代替tab因为有部分场合不允许使用tab)
set expandtab
设置缩进字符数为n
set shiftwidth=n
设置自动语法鳗鱼硬币
syntax on
原文链接:https://rumenz.com/rumenbiji/linux-vi-vim.html
极速赛车公式技巧个人经验p>:set pastetoggle=<F11>
出现粘贴换行符错位,设置一下 .vimrc
” this can change way of paste words
:set paste
” default tabstop=8
:set tabstop=4
” use keyboard F11 to change paste mode
:set pastetoggle=<F11>
vim 缩进
Normal Mode 下,命令>>将对当前行增加缩进,而命令<<则将对当前行减少缩进在命令前使用数字,来指定命令作用的范围
5<<
在 Insert/Replace Mode 下
Ctrl-Shift-t可以增加当前行的缩进Ctrl-Shift-d则可以减少当前行的缩进使用0-Ctrl-Shift-d命令,将移除所有缩进
需要注意的是,当我们输入命令中的 “0” 时,Vim 会认为我们要在文本中插入一个 0,并在屏幕上显示输入的“0”;然后当我们执行命令 0-Ctrl-Shift-d 时,Vim 就会意识到我们要做的是减少缩进,这时 0 会就会从屏幕上消失
vim tab 缩进
tab 缩进宽度默认为 8 个空格
我们可以使用以下命令,来修改缩进宽度
:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab
tabstop: 表示一个 tab 显示出来是多少个空格的长度默认 8softtabstop: 表示在编辑模式的时候按退格键的时候退回缩进的长度当使用 expandtab 时特别有用。shiftwidth: 表示每一级缩进的长度一般设置成跟 softtabstop 一样。 当设置成 expandtab 时缩进用空格来表示noexpandtab 则是用制表符表示一个缩进expandtab 选项,用来控制是否将 Tab 转换为空格, 但是这个选项并不会改变已经存在的文本,如果需要应用此设置将所有 Tab 转换为空格,需要执行:retab!
vim 自动缩进
cindent:set cindent
vim 可以很好的识别出 C 和 Java 等结构化程序设计语言,并且能用 C 语言的缩进格式来处理程序的缩进结构
smartindent:set smartindent
在这种缩进模式中,每一行都和前一行有相同的缩进量,同时这种缩进形式能正确的识别出花括号,当遇到右花括号(}),则取消缩进形式。此外还增加了识别 C 语言关键字的功能。如果一行是以 #开头的,那么这种格式将会被特殊对待而不采用缩进格式。
autoindent:set autoindent
在这种缩进形式中,新增加的行和前一行使用相同的缩进形式
显示隐藏符号
默认不显示 :set nolist显示 :set invlist” normal is :set nolist | show hide is :set invlist
:set nolist
使用 vim 寄存器
使用 vim 寄存器 “+p 粘贴
根本不用考虑是否自动缩进,是否 paste 模式,直接原文传递
如果想保存原寄存器中内容而同时增加新的内容,就要在 yy 前增加标签标签以双引号开始,跟着的是标签名称,可以是数字 0-9,也可以是 26 个字母
显示所有寄存器内容
:reg
注意两个特殊的寄存器:* 和 +
这两个寄存器是和系统相通的,前者关联系统选择缓冲区,后者关联系统剪切板通过它们可以和其他程序进行数据交换
若寄存器列表里无 * 或 + 寄存器,则可能是由于没有安装 vim 的图形界面所致sudo apt-get install vim-gnome
设置 vim 永远显示行号
修改 vim 的配置文件加入 set nu
vi ~/.vimrc
然后输入
set nu
当然也可以输入其他配置类似
set nonu
syntax on
vimrc 常用配置
设置行号
set nu
设置自动缩进
set autoindent
设置tab占n个字符
set tabstop=n
设置以空格代替tab因为有部分场合不允许使用tab)
set expandtab
设置缩进字符数为n
set shiftwidth=n
设置自动语法鳗鱼硬币
syntax on
原文链接:https://rumenz.com/rumenbiji/linux-vi-vim.html