vim技巧补充

Vim 中的内部命令与 vi 编辑器中的内部命令类似。表 1 提供了 Vim 中的光标移动命令。

表 1. 用于移动光标的 Vim 命令

命令动作
h将光标向左移动
j、加号 (+)、Enter 或 Return将光标向下移动
k、减号 (-)将光标向上移动
l将光标向右移动
}将光标移动到当前段落的末尾
{将光标移动到当前段落的开头
)将光标移动到当前句子的末尾
(将光标移动到当前句子的开头
^移动到当前行的第一个非空字符
$移动到当前行末尾
0 (zero)移动到当前行开头
w or W移动到下一单词的开头
b or B移动到上一单词的开头
e移动到下一单词的末尾
H移动到屏幕的第一行
M移动到屏幕的中间一行
L移动到屏幕的最后一行
G移动到文件末尾
gg移动到文件开头
:n移动到行n

 

表 2 显示了用于删除文本的 Vim 命令。


表 2. 用于删除文本的 Vim 命令
命令动作
d删除选中的区域
dd删除整个当前行
10dd删除从当前行开始的 10 行,
dw从当前位置向前删除单词
db从当前光标位置左边开始向后删除单词
dl删除当前光标位置的字符
dh删除当前光标位置左边的字符
d0 (zero)删除当前光标位置到行开头之间的单词
D | d$删除从当前光标位置开始的整个行
x删除光标当前位置的字符
X删除光标当前位置之前的字符

表 3 提供了其他几个有用的 Vim 命令。


表 3. 常用 Vim 命令
命令动作
ih进入插入模式并在当前光标处插入
I进入插入模式并在当前行的开始处插入
a进入插入模式并追加到光标后面
A进入插入模式并追加到当前行末尾
c更改选中的区域
C更改从光标当前位置开始的整个行
o在光标当前所在行下方创建一个新空行,并将光标移动到这一新空行的开头
O在光标当前所在行的上方创建一个新空行,并将光标移动到这一新空行的开头
r替换光标当前位置的单个字符
R替换从光标当前位置开始的多个字符,并在退出插入模式时结束
<Esc>退出插入或可视模式
> or <Tab>向选中区域右边缩进
<向选中区域左边缩进
v启动时突出显示字符
V启动时突出显示的整个行
yy将当前行移动/复制到内存
10yy将从当前行开始的 10 行移动/复制到内存
p粘贴复制或剪切的文本;如果字符被复制(ywdwD),就在光标当前位置之后粘贴这些字符。如果复制的是行,就在光标当前所在的行下面粘贴这些行
P作用和p一样,但是它在光标当前位置的前面粘贴字符,在光标当前所在行上面粘贴行
u撤消最后的更改
<Ctrl> R重做
/<pattern>搜索已找到的下一个模式,并将光标放在已找到的模式的开头
?<pattern>搜索已找到的上一个模式,并将光标放在已找到的模式的开头
n重复上一次的搜索
N重复上一次的搜索,但搜索的方向相反
!<cmd>在 Vim 会话外执行<cmd>




回页首


行模式

尽管广泛使用的是命令和插入模式,但行模式同样重要,只是有时候没有被充分理解和使用。行模式进入行编辑器,使您可以在一行或多行上处理命令。考虑到 vi 以 ex 编辑器命名,所以它只适合进入 ex 编辑器的行模式。

要从命令模式进入行模式,输入冒号(:)即可。然后将光标移动到窗口左下角。继续输入时,所有文本都会出现在窗口底部的冒号后面。单击Enter,开始计算和执行行模式命令。如果确定不执行在行模式下输入的行,则单击Escape返回到命令模式。

使用编辑器的行模式时,请记住两种命令样式。首先,在输入命令时,vi 或 Vim 按原样执行命令。如果执行的命令与修改数据有关,当前行就是目标。但是,使用第二种方法可以提供行数以处理指定的行。要输入行,请在冒号后面输入要处理的行数或行范围,并用逗号(,)分隔开始和结束范围。

例如,如果只处理行 23,那么命令以:23开始。如果要修改 2319 到 3819 之间的行,则输入:2319,3819。要处理从行 45 开始到文件结尾之间的一个命令,需要将最后行的参数替换为美元符号($)— 即:45,$

以下命令只是可以在行模式下执行的最基本命令:

  • :w <file name>将文件写入磁盘。如果提供一个参数,编辑器会试图将数据写入 <file name>。

    注意:如果提供一个参数,而且存在 <file name>,编辑器不会覆盖现有文件的数据。

  • :w! <file name>将文件写入磁盘并覆盖文件中的所有数据。
  • :<x>,<y> w <file name>将从 <x> 到 <y> 之间的行写入 <file name>。
  • :q试图在不保存的情况下退出编辑器。

    注意:如果数据已修改,则需要先保存文件再退出编辑器,否则将导致文件未被保存。

  • :q!退出编辑器,不将文件写入磁盘。
  • :n如果编辑多个文件,首先编辑编辑列表中的下一个文件。
  • :e <file name>编辑 <file name>。
  • :e#如果编辑两个文件,则在两个文件之间切换。
  • :s/<str1>/<str2>/用当前行中的 <str2> 替换第一次出现的 <str1>。
  • :1,$ s/<str1>/<str2>/g从行 1 开始,在整个文件中执行,用 <str2> 替换所有的 <str1>。
  • :r <file name>将 <file name> 读入当前编辑器会话中。
  • :<x>,<y> d删除从 <x> 到 <y> 之间的行。
  • :<x>,<y> y复制从 <x> 到 <y> 之间的行。
按v进入visual状态,选择多行,用>或<缩进或缩出
通常根据语言特征使用自动缩进排版:在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。

 
 

在WORD间移动

除了word之外,Vim还有一种概念WORD。虽然这只是大小写的不同,但是他们却代表了两种不同的事物。word是指由iskeyword选项定义的字符串;而WORD则是指用空白符分隔的字符串。与WORD相关的一些命令如下:

[count]B向后移动count个WORDS
[count]E向前移动count个WORDS,并且将光标置于WORD的末尾.
[count]gE向后移动count个WORDS,并且将光标置于WORD的末尾.
[count]W向前移动count个OWRDS.

命令小结
w向前移动一个word
e
b向后移动一个word
set iskeyword定义word选项
W向前移动一个WORD
E
B向后移动一个WORD

 

 

非正常关闭vi编辑器时会生成一个.swp文件

关于swp文件
使用vi,经常可以看到swp这个文件,那这个文件是怎么产生的呢,当你打开一个文件,vi就会生成这么一个.(filename)swp文件以备不测(不测下面讨论),如果你正常退出,那么这个这个swp文件将会自动删除。下面说不测。
不测分为:1当你用多个程序编辑同一个文件时。
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>2非常规退出时。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
第一种情况的话,为了避免同一个文件产生两个不同的版本(vim中的原话),还是建议选择readonly为好。
第二种情况的话,你可以用vim -r filename恢复,然后再把swp文件删除(这个时候要确保你的swp文件没有用处了,要不然你会伤心的)

swp文件的来历,当你强行关闭vi时,比如电源突然断掉或者你使用了Ctrl+ZZ,vi自动生成一个.swp文件,下次你再编辑时,就会出现一些提示。

你可以使用

vi -r {your file name}

来恢复文件,然后用下面的命令删除swp文件,不然每一次编辑时总是有这个提示。

rm .{your file name}.swp

在网上搜到了一个类似的提示,不同的linux提示可能不一样

“.xorg.conf.swp” already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit:

当然可以用R键恢复。

vi编辑器要正常退出可以使用Shift-ZZ 。

如果不想每次vi崩溃时不保存swp文件,可以修改文件,

表 1. 用于移动光标的 Vim 命令

命令动作
h将光标向左移动
j、加号 (+)、Enter 或 Return将光标向下移动
k、减号 (-)将光标向上移动
l将光标向右移动
}将光标移动到当前段落的末尾
{将光标移动到当前段落的开头
)将光标移动到当前句子的末尾
(将光标移动到当前句子的开头
^移动到当前行的第一个非空字符
$移动到当前行末尾
0 (zero)移动到当前行开头
w or W移动到下一单词的开头
b or B移动到上一单词的开头
e移动到下一单词的末尾
H移动到屏幕的第一行
M移动到屏幕的中间一行
L移动到屏幕的最后一行
G移动到文件末尾
gg移动到文件开头
:n移动到行n

 

表 2 显示了用于删除文本的 Vim 命令。


表 2. 用于删除文本的 Vim 命令

命令动作
d删除选中的区域
dd删除整个当前行
10dd删除从当前行开始的 10 行,
dw从当前位置向前删除单词
db从当前光标位置左边开始向后删除单词
dl删除当前光标位置的字符
dh删除当前光标位置左边的字符
d0 (zero)删除当前光标位置到行开头之间的单词
D | d$删除从当前光标位置开始的整个行
x删除光标当前位置的字符
X删除光标当前位置之前的字符

表 3 提供了其他几个有用的 Vim 命令。


表 3. 常用 Vim 命令

命令动作
ih进入插入模式并在当前光标处插入
I进入插入模式并在当前行的开始处插入
a进入插入模式并追加到光标后面
A进入插入模式并追加到当前行末尾
c更改选中的区域
C更改从光标当前位置开始的整个行
o在光标当前所在行下方创建一个新空行,并将光标移动到这一新空行的开头
O在光标当前所在行的上方创建一个新空行,并将光标移动到这一新空行的开头
r替换光标当前位置的单个字符
R替换从光标当前位置开始的多个字符,并在退出插入模式时结束
<Esc>退出插入或可视模式
> or <Tab>向选中区域右边缩进
<向选中区域左边缩进
v启动时突出显示字符
V启动时突出显示的整个行
yy将当前行移动/复制到内存
10yy将从当前行开始的 10 行移动/复制到内存
p粘贴复制或剪切的文本;如果字符被复制(ywdwD),就在光标当前位置之后粘贴这些字符。如果复制的是行,就在光标当前所在的行下面粘贴这些行
P作用和p一样,但是它在光标当前位置的前面粘贴字符,在光标当前所在行上面粘贴行
u撤消最后的更改
<Ctrl> R重做
/<pattern>搜索已找到的下一个模式,并将光标放在已找到的模式的开头
?<pattern>搜索已找到的上一个模式,并将光标放在已找到的模式的开头
n重复上一次的搜索
N重复上一次的搜索,但搜索的方向相反
!<cmd>在 Vim 会话外执行<cmd>

 




回页首



行模式

尽管广泛使用的是命令和插入模式,但行模式同样重要,只是有时候没有被充分理解和使用。行模式进入行编辑器,使您可以在一行或多行上处理命令。考虑到 vi 以 ex 编辑器命名,所以它只适合进入 ex 编辑器的行模式。

要从命令模式进入行模式,输入冒号(:)即可。然后将光标移动到窗口左下角。继续输入时,所有文本都会出现在窗口底部的冒号后面。单击Enter,开始计算和执行行模式命令。如果确定不执行在行模式下输入的行,则单击Escape返回到命令模式。

使用编辑器的行模式时,请记住两种命令样式。首先,在输入命令时,vi 或 Vim 按原样执行命令。如果执行的命令与修改数据有关,当前行就是目标。但是,使用第二种方法可以提供行数以处理指定的行。要输入行,请在冒号后面输入要处理的行数或行范围,并用逗号(,)分隔开始和结束范围。

例如,如果只处理行 23,那么命令以:23开始。如果要修改 2319 到 3819 之间的行,则输入:2319,3819。要处理从行 45 开始到文件结尾之间的一个命令,需要将最后行的参数替换为美元符号($)— 即:45,$

以下命令只是可以在行模式下执行的最基本命令:

  • :w <file name>将文件写入磁盘。如果提供一个参数,编辑器会试图将数据写入 <file name>。

    注意:如果提供一个参数,而且存在 <file name>,编辑器不会覆盖现有文件的数据。

  • :w! <file name>将文件写入磁盘并覆盖文件中的所有数据。
  • :<x>,<y> w <file name>将从 <x> 到 <y> 之间的行写入 <file name>。
  • :q试图在不保存的情况下退出编辑器。

    注意:如果数据已修改,则需要先保存文件再退出编辑器,否则将导致文件未被保存。

  • :q!退出编辑器,不将文件写入磁盘。
  • :n如果编辑多个文件,首先编辑编辑列表中的下一个文件。
  • :e <file name>编辑 <file name>。
  • :e#如果编辑两个文件,则在两个文件之间切换。
  • :s/<str1>/<str2>/用当前行中的 <str2> 替换第一次出现的 <str1>。
  • :1,$ s/<str1>/<str2>/g从行 1 开始,在整个文件中执行,用 <str2> 替换所有的 <str1>。
  • :r <file name>将 <file name> 读入当前编辑器会话中。
  • :<x>,<y> d删除从 <x> 到 <y> 之间的行。
  • :<x>,<y> y复制从 <x> 到 <y> 之间的行。
按v进入visual状态,选择多行,用>或<缩进或缩出
通常根据语言特征使用自动缩进排版:在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。

 
 

在WORD间移动

除了word之外,Vim还有一种概念WORD。虽然这只是大小写的不同,但是他们却代表了两种不同的事物。word是指由iskeyword选项定义的字符串;而WORD则是指用空白符分隔的字符串。与WORD相关的一些命令如下:

[count]B向后移动count个WORDS
[count]E向前移动count个WORDS,并且将光标置于WORD的末尾.
[count]gE向后移动count个WORDS,并且将光标置于WORD的末尾.
[count]W向前移动count个OWRDS.

命令小结
w向前移动一个word
e
b向后移动一个word
set iskeyword定义word选项
W向前移动一个WORD
E
B向后移动一个WORD

 

 

非正常关闭vi编辑器时会生成一个.swp文件

关于swp文件
使用vi,经常可以看到swp这个文件,那这个文件是怎么产生的呢,当你打开一个文件,vi就会生成这么一个.(filename)swp文件以备不测(不测下面讨论),如果你正常退出,那么这个这个swp文件将会自动删除。下面说不测。
不测分为:1当你用多个程序编辑同一个文件时。
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>2非常规退出时。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
第一种情况的话,为了避免同一个文件产生两个不同的版本(vim中的原话),还是建议选择readonly为好。
第二种情况的话,你可以用vim -r filename恢复,然后再把swp文件删除(这个时候要确保你的swp文件没有用处了,要不然你会伤心的)

swp文件的来历,当你强行关闭vi时,比如电源突然断掉或者你使用了Ctrl+ZZ,vi自动生成一个.swp文件,下次你再编辑时,就会出现一些提示。

你可以使用

vi -r {your file name}

来恢复文件,然后用下面的命令删除swp文件,不然每一次编辑时总是有这个提示。

rm .{your file name}.swp

在网上搜到了一个类似的提示,不同的linux提示可能不一样

“.xorg.conf.swp” already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit:

当然可以用R键恢复。

vi编辑器要正常退出可以使用Shift-ZZ 。

如果不想每次vi崩溃时不保存swp文件,可以修改文件,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值