vim快速移动

前端之家收集整理的这篇文章主要介绍了vim快速移动前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

移动

基本移动

1、方向键:上下左右可以实现光标移动
2、vim特殊的移动方式

命令 光标动作
h 左移一列
l 右移一列
j 下移一行
k 上移一行

基于单词移动

命令 光标动作
w 正向移动到下一单词的开头
b 反向移动到当前单词/上一单词的开头
e 正向移动到当前单词/下一单词的结尾
ge 反向移动到上一单词的结尾

如下图:

* 注意 *:一个单词由字母、数字、下划线,或其他非空白字符的序列组成,单词间以空白字符分隔(参见:h word )。而字串的定义则更简单,它由非空白字符序列组成,字串间以空白字符分隔。
每个面向单词的动作命令,都有一个面向字串的命令与其对应,这当中包括W、B、E 和gE
so~”单词”和”字串”是对精度和速度的一种权衡—如果你想更快地移动的话,可以用面向字串的动作命令;而如果你想以更细的粒度移动的话,则可以用面向单词的动作命令。

对字符进行查找进行移动

Vim 的字符查找命令让我们可以在行内快速移动,并且它们能够在操作符待决模式下很好地工作。
在正常模式下:f{char} 命令是在 Vim 中移动的最快方式之一。它会在光标位置与当前行行尾之间查找指定的字符,如果找到了,就会把光标移到此字符上;如果未找到,则保持光标不动。
; 命令就可以重复该命令(向前跳),加快定位速度;
,命令就可以在跳过的历史中回退(往前跳),;命令的反操作。

命令 用途
f{char} 正向移动到下一个{char} 所在之处
F{char} 反向移动到上一个{char} 所在之处
t{char} 正向移动到下一个{char} 所在之处的前一个字符上
T{char} 反向移动到上一个{char} 所在之处的后一个字符上
; 重复上次的字符查找命令
, 反转方向查找上次的字符查找命令

更强大的查找命令/ ;n、N对其进行前后移动

设置标记位移动

m{a-zA-Z} 命令会用选定的字母标记当前光标所在位置

*m* *mark* *Mark*
m{a-zA-Z}               Set mark {a-zA-Z} at cursor position (does not move
                        the cursor,this is not a motion command).

                                                *m'* *m`*
m'  or  m`              Set the prevIoUs context mark.  This can be jumped to
                        with the "''" or "``" command (does not move the
                        cursor,this is not a motion command).

                                                *m[* *m]*
m[  or  m]              Set the |'[| or |']| mark.  Useful when an operator is
                        to be simulated by multiple commands.  (does not move
                        the cursor,this is not a motion command).

                                                *:ma* *:mark* *E191*
:[range]ma[rk] {a-zA-Z'}
                        Set mark {a-zA-Z'} at last line number in [range],column 0.  Default is cursor line.

{mark} 命令跳到位置标记所在行,并把光标置于该行第一个非空白字符上;而{mark} 命令则把光标移动到设置此位置标记时光标所在之处,也就是说,它同时恢复行、列的位置,具体参见mark-motions

Jumping to a mark can be done in two ways:
1. With ` (backtick):     The cursor is positioned at the specified location
                          and the motion is |exclusive|.
2. With ' (single quote): The cursor is positioned on the first non-blank
                          character in the line of the specified location and
                          the motion is linewise.

vim自动标记

位置标记 跳转
当前文件中上次跳转动作之前的位置
`. 上次修改的地方
`^ 上次插入的地方
`[ 上次修改或复制的起始位置
`] 上次修改或复制的结束位置
`< 上次高亮选区的起始位置
`> 上次高亮选区的结束位置

匹配括号跳转

Vim 提供了一个动作命令,让我们可以在开、闭括号间跳转。在激活了 matchit.vim插件后,此命令也可以用于成对的 XML 标签,以及某些编程语言中的关键字上
% 命令允许我们在一组开、闭括号间跳转

:h %查看详细帮助

跳转

动作命令在一个文件内移动,而跳转则可以在文件间移动

遍历跳转列表

:jumps

:jumps                                                                                                                                                                            
 jump line  col file/text
  91     7    4 kk.sh
  90     1    0 ~/codeTmp/pdlapi-statisfaction/conf/service.properties
  89     1    0 ~/codeTmp/pdlapi-statisfaction/conf/deploy.properties
  88     1    0 ~/codeTmp/pdlapi-statisfaction/conf/db.ext.properties
  87    38    0 ~/codeTmp/pdlapi-statisfaction/conf/db.ext.properties
  ……

任何改变当前窗口中活动文件的命令,都可以被称为跳转命令。Vim 会把执行跳转命令之前和之后的光标位置,记录到跳转列表中

命令 用途
[count]G 跳转到指定的行号
/pattern/?pattern/n/N 跳转到下一个/上一个模式出现之处
% 跳转到匹配的括号所在之处
(/) 跳转到上一句/下一句的开头
{/} 跳转到上一段/下一段的开头
H/M/L 跳到屏幕最上方/正中间/最下方
gf 跳转到光标下的文件
跳转到光标下关键字的定义之处
’{mark}/`{mark} 跳转到一个位置标记

Vim 可以同时维护多份跳转列表。实际上,每个单独的窗口都拥有一份自己的跳转列表。

遍历改变列表

每当对文档做出修改后,Vim 都会记录当时光标所在的位置。遍历改变列表的方法很简单,并且这大概是跳到你要去的地方的最快方式。
Vim 会在编辑会话期间维护一张表,里面记载我们对每个缓冲区所做的修改,此表就是所谓的改变列表(:h changelist)
查看改变列表内容

:changes                                                                                                                                                                          
change line  col text
   11     1    0 #!/bin/bash
   10     2    3 #add
    9    12    0 readonly cur_date="`date +%Y%m%d`"
    8    11    0 #readonly cur_date="`date +%Y%m%d`"
    7    19   12 echo "total Memory: $total_mem total cpu: $total_cpu"
    6    20    0 o#add^[kdkdkdkdkdkdkdkdkdyypkui#^[kdkdkdkdkdkdkdkukrkrkrkrkrkrkrkrkrkrkrkrkdkdrM^[
    5    23    0 for pid in `ps -ef | awk 'NR > 0 {print $2}'` ; do
    4    29    0 o#add^[kdkdkdkdkdkdkdkdkdyypkui#^[kdkdkdkdkdkdkdkukrkrkrkrkrkrkrkrkrkrkrkrkdkdrM^[
    3    23    0 for pid in `ps -ef | awk 'NR > 0 {print $2}'` ; do
    2    23    0 for pid in `ps -ef | awk 'NR > 0 {print $2}'` ; do
    1    23    0 for pid in `ps -ef | awk 'NR > 0 {print $2}'` ; do
>
Press ENTER or type command to continue

标记上次修改方位的位置标记

Vim 会自动创建一些位置标记,它们是对改变列表的一个有用补充。. 标记总是指向上次修改的位置,而^ 标记则会记录上次退出插入模式时光标所在的位置

*'^* *`^*
'^  `^                  To the position where the cursor was the last time
                        when Insert mode was stopped.  This is used by the
                        |gi| command.  Not set when the |:keepjumps| command
                        modifier was used.  {not in Vi}

                                                        *'.* *`.*
'.  `.                  To the position where the last change was made.  The
                        position is at or near where the change started.
                        Sometimes a command is executed as several changes,then the position can be near the end of what the
                        command changed.  For example when inserting a word,the position will be on the last character.
                        {not in Vi}

在大多数场景下,跳转到`. 的效果与使用g; 命令相同。不过位置标记只指向最后修改的位置,而改变列表中则保存了多组位置。我们可以多次按g; 命令,每次它都会把我们带到改变列表中较早的一个位置,而`. 则总是把我们带到改变列表的最后一项。
`^ 标记指向上次插入的位置,它比上次修改的位置更具体一点。如果我们先退出插入模式,接着又在文档中四处移动,然后,当我们又想快速回到退出的地方继续编辑时,用gi 命令就行了(:h gi )。此命令会用`^ 标记恢复光标位置,并切换到插入模式,这真是省时省力的好办法!
Vim 会为编辑会话中的每个单独缓冲区维护一个改变列表,而与之不同的是,每个窗口都会创建一个单独的跳转列表。

未完待续……

猜你在找的Bash相关文章