打印如下文件的操作:i1q1yypq98@1
1
2
3
.....
98
99
100
means the ESC key, and means “Ctrl + a”
这段 Vim 操作包含了一系列命令,下面是对每个部分的详细解释:
操作步骤分析
-
i1
:i
进入插入模式(Insert Mode)。1
输入字符1
。- 这一步的结果是在光标当前位置插入字符
1
。
-
<ESC>
:- 按下
ESC
键退出插入模式,返回到普通模式(Normal Mode)。
- 按下
-
q1
:q
开始录制宏。1
是宏的名称,表示将录制的命令存储在寄存器1
中。- 这一步开始录制接下来的命令。
-
yyp
:yy
复制当前行(yank),将其存储在默认寄存器中。p
粘贴(put)刚刚复制的行到光标所在位置的下一行。- 这两条命令的组合效果是复制当前行并在其下方粘贴一份。
-
<C-a>
:<C-a>
是按下Ctrl
和a
键的组合,通常用于在数字上加一。- 如果光标在一个数字上,这个命令会将该数字加一。
-
q
:- 再次按下
q
,停止录制宏。 - 这将结束对寄存器
1
的录制。
- 再次按下
-
98@1
:98
表示将要执行宏的次数。@1
表示从寄存器1
中执行录制的宏。- 这一步的效果是执行刚才录制的宏 98 次。
整体操作效果
- 在当前行插入
1
。 - 退出插入模式。
- 开始录制宏到寄存器
1
。 - 复制当前行并在其下方粘贴一份。
- 在粘贴的行中,将数字加一。
- 停止录制宏。
- 最后,执行这个宏 98 次。
最终结果
假设您在一个文本文件中,初始状态是:
这是第一行
执行这段 Vim 操作后,您将得到:
这是第一行
1
这是第一行
2
这是第一行
3
...
这是第一行
98
每次执行宏都会在当前行下方插入一行,并将数字加一,直到执行 98 次。
在 Vim 中,宏和寄存器是两个重要的概念,它们用于提高编辑效率和灵活性。以下是对这两个概念的详细解释:
宏
- 定义: 宏是在 Vim 中录制的一系列命令,可以重复执行。它允许用户将一组操作记录下来,并在需要时快速重放。
- 录制宏: 使用
q
命令开始录制宏,后面跟一个寄存器名称(如q1
表示将宏存储在寄存器1
中)。录制完成后,再次按q
停止录制。 - 执行宏: 使用
@
命令来执行宏,例如@1
表示执行存储在寄存器1
中的宏。可以通过指定次数来重复执行宏,例如98@1
表示执行宏 98 次。
寄存器
- 定义: 寄存器是 Vim 中用于存储文本、命令和宏的临时存储区。Vim 提供了多个寄存器,用户可以将文本或命令存储在这些寄存器中以便后续使用。
- 类型:
- 默认寄存器: 用于存储最近一次的复制或剪切操作。
- 命名寄存器: 通过字母(如
a
到z
)来命名的寄存器,用户可以将文本或宏存储在这些寄存器中。 - 数字寄存器: Vim 也提供了数字寄存器(如
0
到9
),用于存储最近的操作。 - 宏寄存器: 用户可以使用
q
命令录制的宏会存储在指定的寄存器中(如1
、2
等)。
宏和寄存器的关系
- 存储和执行: 当用户录制宏时,Vim 会将录制的命令存储在指定的寄存器中。用户可以通过执行该寄存器中的宏来重复这些命令。
- 灵活性: 使用寄存器,用户可以存储多个宏和文本,灵活地在不同的上下文中使用它们。
示例
假设您录制了一个宏,将其存储在寄存器 1
中,宏的内容是复制当前行并在下方粘贴。您可以通过执行 @1
来重放这个宏,或者通过 5@1
来重复执行 5 次。
总结
- 宏: 是一组命令的录制,可以快速重放,适用于重复性操作。
- 寄存器: 是存储文本、命令和宏的临时存储区,允许用户灵活地管理和使用这些数据。
通过理解宏和寄存器的概念,您可以更高效地使用 Vim 进行文本编辑和操作。
在 Vim 中,<C-v>24l4jd$p
是一系列组合命令,涉及到插入模式和普通模式的操作。我们可以逐步分析这段命令的含义:
逐步解析
-
<C-v>
:- 这是一个特殊的命令,表示按下
Ctrl
和v
键的组合。它用于进入“块选择模式”(Visual Block Mode),允许用户选择文本块。
- 这是一个特殊的命令,表示按下
-
24l
:l
是普通模式下的命令,表示光标向右移动一个字符。24l
表示光标向右移动 24 个字符。
-
4j
:j
是普通模式下的命令,表示光标向下移动一行。4j
表示光标向下移动 4 行。
-
d
:d
是普通模式下的命令,表示删除选中的文本。结合之前的选择,这里是删除光标位置到当前行的文本。
-
$
:$
是普通模式下的命令,表示移动到当前行的末尾。
-
p
:p
是普通模式下的命令,表示在光标后粘贴之前删除的文本。
整体操作
结合以上分析,<C-v>24l4jd$p
的整体操作步骤如下:
- 进入块选择模式: 使用
<C-v>
进入块选择模式。 - 移动光标: 向右移动 24 个字符,光标现在位于目标位置。
- 向下移动: 向下移动 4 行,光标现在位于目标行。
- 删除: 删除从光标当前位置到当前行末尾的文本。
- 移动到行末: 移动光标到当前行的末尾。
- 粘贴: 在光标后粘贴之前删除的文本。
总结
这段命令的作用是从当前光标位置向右移动 24 个字符,然后向下移动 4 行,删除该位置到当前行末尾的文本,最后在当前行末尾粘贴之前删除的文本。这可以用于快速编辑文本,特别是在处理块选择和文本替换时。
启动高亮:
cp /etc/vim/vimrc ~/.vimrc
cd ~
ls -a
vim .vimrc
--- before modification
+++ after modification
@@ -21,3 +21,3 @@" If using a dark background within the editing area and syntax highlighting" turn on this option as well
-"set background=dark
+set background=dark
@@ -31,5 +31,5 @@" Uncomment the following to have Vim load indentation rules and plugins" according to the detected filetype.
-"filetype plugin indent on
+filetype plugin indent on
@@ -37,10 +37,10 @@" The following are commented out as they cause vim to behave a lot" differently from regular Vi. They are highly recommended though."set showcmd " Show (partial) command in status line.
-"set showmatch " Show matching brackets.
-"set ignorecase " Do case insensitive matching
-"set smartcase " Do smart case matching
-"set incsearch " Incremental search
+set showmatch " Show matching brackets.
+set ignorecase " Do case insensitive matching
+set smartcase " Do smart case matching
+set incsearch " Incremental search"set autowrite " Automatically save before commands like :next and :make
-"set hidden " Hide buffers when they are abandoned
+set hidden " Hide buffers when they are abandoned"set mouse=a " Enable mouse usage (all modes)
You can append the following content at the end of the .vimrc file to enable more features. Note that contents after a double quotation mark " are comments, and you do not need to include them. Of course, you can inspect every features to determine to enable or not.setlocal noswapfile " 不要生成swap文件
set bufhidden=hide " 当buffer被丢弃的时候隐藏它
colorscheme evening " 设定配色方案
set number " 显示行号
set cursorline " 突出显示当前行
set ruler " 打开状态栏标尺
set shiftwidth=2 " 设定 << 和 >> 命令移动时的宽度为 2
set softtabstop=2 " 使得按退格键时可以一次删掉 2 个空格
set tabstop=2 " 设定 tab 长度为 2
set nobackup " 覆盖文件时不备份
set autochdir " 自动切换当前目录为当前文件所在的目录
set backupcopy=yes " 设置备份时的行为为覆盖
set hlsearch " 搜索时高亮显示被找到的文本
set noerrorbells " 关闭错误信息响铃
set novisualbell " 关闭使用可视响铃代替呼叫
set t_vb= " 置空错误铃声的终端代码
set matchtime=2 " 短暂跳转到匹配括号的时间
set magic " 设置魔术
set smartindent " 开启新行时使用智能自动缩进
set backspace=indent,eol,start " 不设定在插入状态无法用退格键和 Delete 键删除回车符
set cmdheight=1 " 设定命令行的行数为 1
set laststatus=2 " 显示状态栏 (默认值为 1, 无法显示状态栏)
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ Ln\ %l,\ Col\ %c/%L%) " 设置在状态行显示的信息
set foldenable " 开始折叠
set foldmethod=syntax " 设置语法折叠
set foldcolumn=0 " 设置折叠区域的宽度
setlocal foldlevel=1 " 设置折叠层数为 1
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR> " 用