vim 快速跳到文件末尾 在最后一行下方新增一行
移到末尾,并且进入文本录入模式 GA
(大写G大写A)
在一般模式(刚进入的模式,esc模式)
GA 或 Shift +ga
先 G
或 shift+g
到最后一行
然后 A
或 shift+a
到本行末尾 并且进入文本录入模式
在最后一行下方新增一行 (光标换行,文字不换行) Go
(大写G小写o)
在一般模式(刚进入的模式,esc模式)
Go 或 Shift+g 然后 o
先 G
或 shift+g
到最后一行
然后 小写o
在该行下方新增一行
目录
- vim 快速跳到文件末尾 在最后一行下方新增一行
- 移到末尾,并且进入文本录入模式 `GA` (大写G大写A)
- 在最后一行下方新增一行 (光标换行,文字不换行) `Go` (大写G小写o)
- vi的多种工作模式
- 移到末尾,并且进入文本录入模式
- 在最后一行下方新增一行 (光标换行,文字不换行)
- 扩展知识
- 光标快速移动
- 首行(第一行),尾行(最后一行开头)
- 某行
- 屏首,屏中,屏尾
- 行首行尾
- 上下左右
- 新增行, 并进入文字录入模式
- 复制剪切粘贴删除
- 复制
- 可视化选择复制或剪切
- 粘贴
- 删除
- 删除,然后自动进入文字插入模式
- 删除,停留在 ESC 模式
- 删除行,删除整行
- 删除当前整一行
- 删除多行
- 撤销(回退)(后退)重做(前进)
- 查找替换
- 查找
- 替换
- 限制在可视的选定区域进行替换
- 保存退出
- 行号
- 其它
- 动作后会进入文字输入编辑模式
- 进入文字输入插入模式 INSERT模式
- 进入文字输入覆盖替换模式 REPLACE模式
- 附
- 解决Ubuntu22.04Desktop桌面版的vim的编辑模式下的上下左右变成ABCD
- 解决办法1, 卸载重装vim
- 解决办法2 , 修改 `/etc/vim/vimrc.tiny`
vi的多种工作模式
- 一般模式,刚进入vi的模式, esc模式,我觉得可叫快捷键模式(按键模式), 按esc的模式
- 文本输入模式(
a
,A
,i
,I
,o
,O
,s
,S
,C
进入插入模式R
进入覆盖模式) - 底部命令行模式(冒号
:
开头,/
开头,?
开头) - 连续字符串选择可视模式(
v
) - 块选择可是模式(
ctrl+v
)
移到末尾,并且进入文本录入模式
在一般模式(刚进入的模式,esc模式)
GA 或 Shift +ga
先 G
或 shift+g
到最后一行
然后 A
或 shift+a
到本行末尾 并且进入文本录入模式
在最后一行下方新增一行 (光标换行,文字不换行)
在一般模式(刚进入的模式,esc模式)
Go 或 Shift+g 然后 o
先 G
或 shift+g
到最后一行
然后 小写o
在该行下方新增一行
扩展知识
光标快速移动
#### 文档首,文档尾 文档首 : `gg` 或 `1gg` 文档尾 : `G$` 或 `999999gg$` 或 `999999G$` (文档尾就是(尾行行尾)(末行行尾)(最后一行行尾)
首行(第一行),尾行(最后一行开头)
首航就是文档首: gg
或 1gg
或 1G
尾行就是末行行首(最后一行行首): G
或 999999gg
或 999999G
或 :999999
到最后行是在 esc模式下 键盘大写时按G
键 或 小写时按shift+g
键
到第一行是按两次小写g gg
或者 输入冒号:0
或冒号:1
gg
或:0
或:1
--------第一行的开头G
----------------------------最后一行开头
888G
或888gg
或:888
到第888行或尾行
某行
某行行首: 行号gg
或行号G
或 冒号行号
, 如 1gg
,2G
,3gg
,666G
,888gg
,:777
,:999
行号gg
如:1gg
,3gg
,666gg
,行号G
如:1G
,3G
,4G
,5G
,666G
,冒号行号
如::0
=:1
,:3
,:666
,
冒号可以使用0,效果同1 , gg和G不能用0开头, 0开头直接起效到行首
屏首,屏中,屏尾
H
屏首 M
屏中 L
屏尾
行首行尾
- 当前行首:
0
(零) - 当前行第一个字符:
^
(Shift+6) - 当前行尾:
$
(Shift+4) 或 999999空格 或 9999999999右
上下左右
数字右键
=数字空格
=数字小写l
: 光标右移动数个字符
数字下键
=数字回车
: 光标下移数行
数字左键
=数字小写h
: 光标左移动数个字符
数字上键
: 光标上移数行
新增行, 并进入文字录入模式
- 在当前行下方新增一行并进入编辑模式, 用
o
小写 - 在当前行上方新增一行并进入编辑模式, 用
O
大写
复制剪切粘贴删除
复制
yy
=y1y
=1yy
复制光标所在行
yyp
=y1yp
=1yyp
向下复制粘贴当前行
yyP
=y1yP
=1yyP
向上复制粘贴当前行
3yh
或y3h
光标前三字符 3yl
或y3l
光标及后两字符
yy
本行 y0
行首到光标 y^
本行第一个字符到光标 y$
光标到行尾
3yy
或y3y
本行和下两行
yw
光标 至 空格后出现字符
可视化选择复制或剪切
有三种方法选择捕获
v
小写v 选连续文字, 首末行可不包括整行V
大写V 选连续文字, 所有行都是整行- Ctrl+
v
小写v, 块选,文字可不连续, 对角线方框片选
先将鼠标移到想要的开始位置,然后按v
然后就可以通过 上下左右 像鼠标按住左键那样选择
选好区域后按y
复制,按d
或x
剪切,p
粘贴, c
或s
删除
#### 剪切(删除) `d,D,x,X`是剪切,为 方便`p,P`粘贴,将保持在Esc模式 `c,C,s,S`纯删除,会进入编辑模式,
剪切的d语法
如同复制的y语法
dd
=d1d
=1dd
剪切光标行,连同换行符一同剪切,本行消失
3dh
或d3h
光标前三字符 3dl
或d3l
光标及后两字符
dd
本行 d0
行首到光标 d^
本行第一个字符到光标 d$
光标到行尾
3dd
或d3d
本行和下两行
x
剪切光标字符
X
剪切光标前一个字符
粘贴
粘贴 分为 粘贴到光标前后 和 粘贴到当前行上下
p
小写p粘贴到 光标后 或 当前行下
P
大写P粘贴到 光标前 或 当前行上
-
当剪切板内容非整行时, 粘贴到光标前后
当剪切板内容是整行时, 粘贴到当前行上下 -
当用小写
v
选取片段时,粘贴到光标前后
当用大写V
选取整行多行时,粘贴到当前行上下 粘贴到光标前后
当使用y3hp
或9ylp
或y6hP
,8ylP
等非整行选取时,
当使用 yyP``或yyp
等时, 不是在光标前后, 而是当前行上下
yyp
=y1yp
=1yyp
是在行下方复制粘贴当前行,而不是光标后
yyP
=y1yP
=1yyP
是在行下方复制粘贴当前行,而不是光标后
y3yp
=3yyp
是在行下方复制粘贴当前及下方3行,而不是光标后
y6yP
=6yyP
是在行下方复制粘贴当前及下方6行,而不是光标后
删除
c,C,s,S
纯删除,会进入编辑模式,
d,D,x,X
是剪切,为 方便p,P
粘贴,将保持在Esc模式
删除,然后自动进入文字插入模式
-
S
清空光标行 (大写S) , 保留换行符, 行还在,变成空行,
S
=cc
=c1c
=1cc
s
删除光标字符 (小写s) , 删除一个字符 -
C
删除光标到行尾 (大写C) , 连同光标字符到行尾都删除c
(小写c)操作语法类似d
和y
, 作用是删除, 如同d
, 只是执行后会进入文字输入插入模式
cc
=c1c
=1cc
=S
清空光标行 , 保留换行符, 行还在, 变成了空行,
3ch
=c3h
光标前三字符3cl
=c3l
光标及后两字符
c0
行首到光标c^
本行第一个字符到光标c$
光标到行尾
3cc
或c3c
本行和下两行
C
光标到行末 (大写C)
删除,停留在 ESC 模式
d,D,x,X是剪切,有删除效果,并停留在ESC模式
dd
=d1d
=1dd
剪切(复制并删除)当前行, 行消失, 停留在ESC模式
小写x
=1x
~=约等于Delete: 删除光标字符, del键不是剪切,只删除,不复制
大写X
=1X
: 剪切左边一个字符, 回退键不会删除
小写88x
剪切右边连同光标共88个字符
大写88X
剪切光标左边(不含光标)88个字符
删除行,删除整行
删除当前整一行
删除当前整行的效果有:
- 连同换行符一起删除,行消失
cc
=c1c
=1cc
=S
清空光标行 , 保留换行符, 行还在, 变成了空行,并进入插入编辑模式
- 保留换行符,行还在,变成空行,保留空行
dd
=d1d
=1dd
剪切(复制并删除)当前行, 行消失, 停留在ESC模式
删除多行
3S
=c3c
=3cc
, 删除本行及下方2行,共3行 , 留一个空行,并进入插入编辑模式
c3↓
=3c↓
, 删除本行及下方3行,共4行, 留一个空行,并进入插入编辑模式
c3↑
=3c↑
, 删除本行及上方3行,共4行, 留一个空行,并进入插入编辑模式
撤销(回退)(后退)重做(前进)
u
撤销(回退)(后退)
ctrl+r
重做 CTRL+r , 撤销撤销, 撤销回退, 撤销后退,前进
查找替换
查找
支持正则表达式
/
pattern 向下查找pattern的匹配
?
pattern 向上
n
下一个
N
上一个
替换
:s/
a/
b 本行第一个a变b
:s/
a/
b/g
本行所有a变b
:%s/
a/
b 所有行第一个a变b
:%s/
a/
b/g
所有行所有a变b , 整个文档的a变b
限制在可视的选定区域进行替换
用光标确定起始点, 然后v
进入连续字符串选择, 或ctrl+v
进入块选择
按冒号:
, 底部出现 :'<,'>
在:'<,'>
后追加s/pattern/content/g
变成 :'<,'>s/pattern/conten/g
回车就能将pattern匹配到的内容替换
保存退出
:w
----------------保存
:q
----------------退出
:q!
--------------强制退出
:wq
或 ZZ
— 保存退出
:wq!
------------ 强制保存退出
行号
:set nu
显示行号 :set nonu
关闭行号
其它
.
重复上一个动作 (点)
n空格键
光标移到n个字符后
n回车键
光标下移n行
动作后会进入文字输入编辑模式
分两种: insert插入模式 / replace覆盖模式
a和i都是进入插入模式, 不要觉得i是insert就迷惑a是不是覆盖 , i是光标前insert, a是光标后insert , append追加不是覆盖
进入文字输入插入模式 INSERT模式
a
光标后插入i
光标前插入
I
光标移到本行第一个字符后开始插入O
光标上方插入一行
o
光标下方插入一行S
删除本行
s
删除光标字符C
删除光标到行尾
c
小c操作语法类似d
和y
, 作用是删除, 如同d
, 只是执行后会进入文字输入插入模式,并保留空行,d
是剪切3ch
或c3h
光标前三字符3cl
或c3l
光标及后两字符
cc
本行c0
行首到光标c^
本行第一个字符到光标c$
光标到行尾
3cc
或c3c
本行和下两行- 先
R
进入覆盖模式,然后按键盘insert
按键
进入文字输入覆盖替换模式 REPLACE模式
- 在插入模式下按
insert
按键 R
直接进入覆盖模式 (小写r接字符
只替换光标处一个字符,替换后依旧在一般模式)
附
解决Ubuntu22.04Desktop桌面版的vim的编辑模式下的上下左右变成ABCD
Ubuntu22.04Desktop桌面版的vim的编辑模式下的上下左右变成ABCD , 退格键也失效
解决办法1, 卸载重装vim
sudo apt remove vim
sudo apt install -y vim
解决办法2 , 修改 /etc/vim/vimrc.tiny
- 将 兼容模式 改为 不兼容模式
set compatible
改为set nocompatible
, 或加到后面 - 加入一条
set backspace=2
set nocompatible
set backspace=2
暂时没法用vi,vim , 可以用 nano 或 gedit 修改
远程用
sudo nano /etc/vim/vimrc.tiny
本机用
sudo gedit /etc/vim/vimrc.tiny
原先的 /etc/vim/vimrc.tiny
" Vim configuration file, in effect when invoked as "vi". The aim of this
" configuration file is to provide a Vim environment as compatible with the
" original vi as possible. Note that ~/.vimrc configuration files as other
" configuration files in the runtimepath are still sourced.
" When Vim is invoked differently ("vim", "view", "evim", ...) this file is
" _not_ sourced; /etc/vim/vimrc and/or /etc/vim/gvimrc are." Debian system-wide default configuration Vim
set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim82,/usr/share/vim>
set compatible" vim: set ft=vim:
修改后的 /etc/vim/vimrc.tiny
" Vim configuration file, in effect when invoked as "vi". The aim of this
" configuration file is to provide a Vim environment as compatible with the
" original vi as possible. Note that ~/.vimrc configuration files as other
" configuration files in the runtimepath are still sourced.
" When Vim is invoked differently ("vim", "view", "evim", ...) this file is
" _not_ sourced; /etc/vim/vimrc and/or /etc/vim/gvimrc are." Debian system-wide default configuration Vim
set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim82,/usr/share/vim>set nocompatible
set backspace=2" vim: set ft=vim:
用脚本修改
echo '" Vim configuration file, in effect when invoked as "vi". The aim of this
" configuration file is to provide a Vim environment as compatible with the
" original vi as possible. Note that ~/.vimrc configuration files as other
" configuration files in the runtimepath are still sourced.
" When Vim is invoked differently ("vim", "view", "evim", ...) this file is
" _not_ sourced; /etc/vim/vimrc and/or /etc/vim/gvimrc are." Debian system-wide default configuration Vim
set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim82,/usr/share/vim>set nocompatible
set backspace=2" vim: set ft=vim:' | sudo tee /etc/vim/vimrc.tiny
或者
sudo sed -ie 's/compatible/nocompatible\nset backspace=2/' /etc/vim/vimrc.tiny
查看并试验vim的上下左右
sudo vi /etc/vim/vimrc.tiny
还原
echo '" Vim configuration file, in effect when invoked as "vi". The aim of this
" configuration file is to provide a Vim environment as compatible with the
" original vi as possible. Note that ~/.vimrc configuration files as other
" configuration files in the runtimepath are still sourced.
" When Vim is invoked differently ("vim", "view", "evim", ...) this file is
" _not_ sourced; /etc/vim/vimrc and/or /etc/vim/gvimrc are." Debian system-wide default configuration Vim
set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim82,/usr/share/vim>
set compatible" vim: set ft=vim:' | sudo tee /etc/vim/vimrc.tiny