vi 编辑器有三种模式:
正常模式:查看文本,可转换到输入模式或命令模式,在这两个模式下按 Esc 键可以回到正常模式。输入模式:正常模式下,使用 i、a 等进入输入模式,可以修改文本内容。详解: i:在当前光标处进入输入模式,A:将光标移动至当前行行末并进入输入模式,o:在当前行的下面插入新行,光标移动至新行并进入输入模式,O:在当前行的上面插入新行,光标移动至新行并进入输入模式,ce 或 cw :删除当前光标后单词的部分,并进入输入模式,c$:删除当前光标到行尾的部分,并进入输入模式,c^:删除当前光标到行首的部分,并进入输入模式,命令模式:正常模式下,使用 : 进入命令模式,可以执行保存退出等命令。 输入模式的进入可能很多人只知道i,其实是有很多快捷键可以进入输入模式常见用法:
按 Esc 键可以回到正常模式,或终止按了一半的命令。在正常模式下,输入 :q! 退出编辑器并放弃所有的改动。q 表示退出,!表示不保存。在正常模式下,输入 :qw 退出编辑器并保存所有的改动。q 表示退出,w表示保存。通过命令 vim 文件名 <回车> 进入 vim 编辑器,如果文件不存在则创建这个文件。u 撤消最后执行的命令U 撤消对整行的修改。Linux 发行版通常自带 Vim 教程命令 vimtutor,直接在终端输入这个命令即可进入教程。
0:光标跳转到行首。 ^:光标跳转到行首,跳过所有空白字符。 $:光标跳转到行尾。 w:光标跳转到后一个单词首字母位置上,一定是下一个单词。 b:光标跳转到前一个单词首字母位置上,一定是下一个单词。 e:光标跳转到后一个单词尾字母位置上,可能是当前单词或下一个单词。 1G 或 gg:光标跳到文件首行。 G:光标跳到文件末行。 数字 G:光标跳到文件中指定的行数。
:set nu:显示行号。 :set nonu:取消行号显示。
Ctrl + f 或 PgDn:向下翻页 Ctrl + b 或 PgUp:向上翻页 Ctrl + u:向上翻半页 Ctrl + d:向下翻半页
正常(Normal)模式下,x 键删除光标所在位置的字符,相当于 Delete 键。 注意,删除时如果遇到换行符,则改变删除方向,删除前面的字符。
正常(Normal)模式下,按 i 键(表示 Insert)进入插入(Insert)模式,插入文本到光标所在位置。 此时,hjkl 四个按键无法用于移动光标,只能用箭头。
正常(Normal)模式下,按 a 键(表示 append)进入插入(Insert)模式,插入文本到光标所在位置的后面。 此时,hjkl 四个按键无法用于移动光标,只能用箭头。
输入 dw 可以从光标处删除至一个单词的末尾,包括空格。 对于中文,直接删除至句子后的第一个标点。
输入 d$ 可以从光标处删除至行末。
许多改变文本的命令都由一个操作符和一个动作构成。
使用删除操作符 d 的删除命令的格式如下:
d motion其中: d - 删除操作符。 motion - 操作符的操作对象(在下面列出)。
动作列表:
w - 从当前光标当前位置直到下一个单词起始处,不包括它的第一个字符。e - 从当前光标当前位置直到单词末尾,包括最后一个字符。$ - 从当前光标当前位置直到当前行末。
因此输入 de 会从当前光标位置删除到单词末尾。
输入 2w 使光标向前移动两个单词。 输入 3e 使光标向前移动到第三个单词的末尾。 输入 0 (数字零) 移动光标到行首。 输入 $ 移动光标到行尾。
上面已经提到过删除操作符和动作的组合,可以在组合中动作之前插入一个数字以删除更多:
d number(数字) motion例如,对于“this is a test”,光标在行首时,
输入 dw 会删除“this ”成为“is a test”;输入 d2w 会删除“this a ”成为“a test”输入 de 会删除“this”成为“ is a test”(注意不会删除空格);输入 d2e 会删除“this a”成为“ a test”不管是删除还是复制,都会讲对应文本放入 Vim 自带的粘贴板,通过 p 可以在光标所在行的下一行粘贴,通过 P 可以在光标所在行的上一行粘贴。
输入 u 可以撤消 U 以及更前的命令。 Ctrl + r 可以撤销之前的撤销操作,恢复更改过的内容。
删除数据后,会存入 vim 的寄存器中。输入 p 可以将最后一次删除的内容粘贴到光标之后。例如:
输入 dd 将该行删除,这会将该行保存到 Vim 的一个寄存器中。接着将光标移动到其他行,即准备粘贴的位置的上方。光标的具体位置不重要。然后在正常模式下(键进入)输入 p 将该行粘贴。rx 会替换光标所在位置的字符为 x。
CTRL + g 查看文件总行数,光标所在行列。G 可以跳转到某一行。
G:跳转到文件最后一行。gg:跳转到文件第一行。20G:跳转到文件第 20 行。输入 / 后,可以输入要查找的字符串,回车即可开始查找并将光标定位的匹配到的字符串的第一个字符。
/error:回车后,开始查找 error 字符串。?error:回车后,开始反方向查找 error 字符串。n:再次执行查找操作。N:反方向再次执行查找操作。CTRL + o:光标回到前一个位置。比如我在第 20 行执行搜索并跳转到第一个匹配到的 40 行,按下 CTRL + o 后光标回到第 20 行。CTRL + i:光标回到下一个位置。经常需要在文本中找对应的另一半括号,在正常模式下,将光标定位到左括号或右括号并输入 %,光标会自动跳转到另一半对应的括号。支持小括号、中括号、大括号:( [ {``) ] }。
:s/old/new/g 命令可以将“old”字符串替换为“new”。
:s/old/new:将光标所在行的第一个“old”字符串替换为“new”。:s/old/new/g:将光标所在行的所有的“old”字符串替换为“new”。:#,#s/old/new/g:#,# 表示两个行号,在这两行之间的“old”字符串都会被替换为“new”。:%s/old/new/g:将整个文件中的“old”字符串替换为“new”。:%s/old/new/gc:找出整个文件中的“old”字符串,并提示是否替换为“new”。按下 v 后,进入 Visual 模式,类似按下鼠标左键,可以前后移动光标自由选择文本。步骤如下:
光标移动到起始位置后,按下 v 键,进入 Visual 模式移动光标选择一部分文本后,按下 : 字符,屏幕底部会自动出现 :'<,'> 提示字符在:'<,'> 提示字符后面输入 w TEST ,TEST 表示一个不存在的文件名回车,这部分文本会保存到新创建的 TEST 文件中。可以通过 :!ls -al 来验证。文本选中后,可以执行多种操作: - d:删除所选文本。
:r FILENAME 会在光标位置插入新行,放入文件中的内容。步骤如下:
光标移动到合适位置输入 :r FILENAME 插入文件内容,例如 :r TEST也可以读取外部命令的输出,例如 :r !ls 会读取 ls 命令的输出并放入光标所在位置。
i、o、O、a、A 都会进入 Insert 插入模式,只是位置不同。
Replace 模式类似 Insert 模式,但是每次插入字符都会替换原位置的已有字符。
通过 v 进入 Visual 模式选中文本后,按 y 复制文本,移动光标到合适位置按 p 粘贴文本。例如对于下面文本:
---> a) this is the first item. b) 光标移动到第一行的 this 前的空格通过 v 进入 Visual 模式,选中文本到 first 前的空格按 y 复制高亮选中的文本移动光标到第二行末尾按 p 粘贴文本通过 /xx 搜索字符串时,默认区分大小写,
incsearch 每输入一个字符就实时重新匹配一次并显示匹配的位置hlsearch 高亮显示匹配项ignorecase 忽略大小写Vim 有一个在线帮助系统,启动后会以上下两部分分屏显示帮助文档和当前打开的文档。具体的用法在帮助系统开始部分有详细说明。常用操作有:
进入帮助系统:启动 Vim 后按 F1 或输入 :help 即可进入退出:确定光标在帮助系统视窗之内,通过 :q、:quit 或 :exit 都可以退出切换视窗:连续两次 Ctrl + w查看指定主题的帮助:Vim 的许多特性默认关闭,要启用这些特性,需要编写 vimrc 脚本文件。可以通过 Vim 自带的示例创建这个脚本:
编辑 ~/.vimrc 文件,可以通过 vim ~/.vimrc 直接进入,或 vim 进入 Vim 后通过 :e ~/.vimrc 进入读取示例文件 :r $VIMRUNTIME/vimrc_example.vim保存 :w要在启动 Vim 时默认开启 incsearch 选项,只需要在 vimrc 脚本中添加一句:
set incsearch更多资料可以通过 :help vimrc-intro 命令查看。示例文件如下:
" An example for a vimrc file. " " Maintainer: Bram Moolenaar <Bram@vim.org> " Last change: 2011 Apr 15 " " To use it, copy it to " for Unix and OS/2: ~/.vimrc " for Amiga: s:.vimrc " for MS-DOS and Win32: $VIM\_vimrc " for OpenVMS: sys$login:.vimrc " When started as "evim", evim.vim will already have done these settings. if v:progname =~? "evim" finish endif " Use Vim settings, rather than Vi settings (much better!). " This must be first, because it changes other options as a side effect. set nocompatible " allow backspacing over everything in insert mode set backspace=indent,eol,start if has("vms") set nobackup " do not keep a backup file, use versions instead else set backup " keep a backup file endif set history=50 " keep 50 lines of command line history set ruler " show the cursor position all the time set showcmd " display incomplete commands set incsearch " do incremental searching " For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries " let &guioptions = substitute(&guioptions, "t", "", "g") " Don't use Ex mode, use Q for formatting map Q gq " CTRL-U in insert mode deletes a lot. Use CTRL-G u to first break undo, " so that you can undo CTRL-U after inserting a line break. inoremap <C-U> <C-G>u<C-U> " In many terminal emulators the mouse works just fine, thus enable it. if has('mouse') set mouse=a endif " Switch syntax highlighting on, when the terminal has colors " Also switch on highlighting the last used search pattern. if &t_Co > 2 || has("gui_running") syntax on set hlsearch endif " Only do this part when compiled with support for autocommands. if has("autocmd") " Enable file type detection. " Use the default filetype settings, so that mail gets 'tw' set to 72, " 'cindent' is on in C files, etc. " Also load indent files, to automatically do language-dependent indenting. filetype plugin indent on " Put these in an autocmd group, so that we can delete them easily. augroup vimrcEx au! " For all text files set 'textwidth' to 78 characters. autocmd FileType text setlocal textwidth=78 " When editing a file, always jump to the last known cursor position. " Don't do it when the position is invalid or when inside an event handler " (happens when dropping a file on gvim). " Also don't do it when the mark is in the first line, that is the default " position when opening a file. autocmd BufReadPost * \ if line("'\"") > 1 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif augroup END else set autoindent " always set autoindenting on endif " has("autocmd") " Convenient command to see the difference between the current buffer and the " file it was loaded from, thus the changes you made. " Only define it when not defined already. if !exists(":DiffOrig") command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis \ | wincmd p | diffthis endif很多命令都可以使用自动补全功能,通过 Ctrl + D 和 TAB 尝试即可。这对于 :help 命令尤其有用。
Vim 可用的命令太多了,可以通过 :help user-manual 来查看。如果还想深入学习,就需要去读几本专门的书籍了。推荐 Steve Oualline 的 Vim - Vi Improved。
转载于:https://www.cnblogs.com/kika/p/10851627.html
