📄 tips.cnx
字号:
*tips.txt* For Vim version 6.3. 最近更新: 2004年6月 Vim 参考手册 作者:Bram Moolenaar (翻译:iCrazy <icrazy@ustc.edu> http://vimcdoc.sf.net)使用 Vim 的技巧 *tips*别忘记浏览用户手册,里面有很多实用的技巧 |usr_toc.txt|.编辑 C 程序 |C-editing|查找使用标识符的地方 |ident-search|在 xterm 中切换屏幕 |xterm-screens|在插入模式下滚屏 |scroll-insert|平滑的滚屏 |scroll-smooth|纠正普通的录入错误 |type-mistakes|统计单词,行数 |count-items|恢复光标位置 |restore-position|文件更名 |rename-files|加速外部命令的执行 |speed-up|一些有用的映射 |useful-mappings|压缩帮助文件 |gzip-helpfile|十六进制编辑 |hex-editing|在一个窗口中执行 shell 命令 |shell-window|在自动命令中使用符号 <> |autocmd-<>|==============================================================================编辑 C 程序 *C-editing*Vim 里面有不少功能可以帮助你们编辑 C 程序。以下是一个概括,你们可以使用标签跳转到具体的内容中去:|usr_29.txt| 用户手册中关于在程序的不同部分间移动的内容。|usr_30.txt| 用户手册中关于编辑程序的内容。|C-indenting| 输入时自动设置每行的缩进。|=| 重新缩进一些行。|format-comments| 对注释进行编排。|:checkpath| 显示所有被包含的文件 (嵌套)。|[i| 在当前和被包含的文件中查找光标当前位置的标识符。|[_CTRL-I| 跳转到 "[i" 的匹配。|[I| 显示在当前和被包含的文件中现出光标所在位置标识符的 那些行。|[d| 在当前和被包含的文件中查找光标所在位置的标识符的定义 (define)。|CTRL-]| 跳转到光标当前位置的标签处 (例如:一个函数的定义)。|CTRL-T| 跳转到执行 CTRL-] 命令前的地方。|:tselect| 从一连串匹配的标签中选出一个。|gd| 跳转到光标当前位置的局部变量的声明处。|gD| 跳转到光标当前位置的全局变量的声明处。|gf| 跳转到光标当前位置的文件名表示的文件。|%| 跳转到匹配的(), {}, [], /* */, #if, #else, #endif 处。|[/| 跳转到上一个注释开始的位置。|]/| 跳转到下一个注释结束的位置。|[#| 返回到未闭合的 #if, #ifdef, or #else 处。|]#| 前进到未闭合的 #else 或 #endif 处。|[(| 返回到未闭合的 '(' 处。|])| 前进到未闭合的 ')' 处。|[{| 返回到未闭合的 '{' 处。|]}| 前进到未闭合的 '}' 处。|v_ab| 选中一个“块” ("a block"),从 "[(" 至 "])",含括号|v_ib| 选中一个“内部块” ("inner block"),从 "[(" 至 "])"|v_aB| 选中一个“块” ("a block"),从 "[{" 至 "]}",含括号|v_iB| 选中一个“内部块” ("inner block"),从 "[{" 至 "]}"==============================================================================查找使用标识符的地方 *ident-search*你应该已经知道 |tags| 可以被用来跳转到定义函数和变量的地方。但是有时你希望跳转到使用函数和变量的地方。可以用以下2种方法实现:1. 使用 |:grep| 命令。这个应该可以在大多数 Unix 系统上工作,但是速度会比较慢(因为它读取所有的文件),并且只能在一个目录中搜索。2. 使用 ID 工具集。这个速度比较块而且可以搜索多个目录。它使用一个数据库来存放定位信息。你需要一些额外的程序来使它得以工作,并且你必须使数据库不断保持更新。使用 GNU id 工具集:你所需要的:- 安装 GNU id 工具集(mkid 是用来创建 ID 的,lid 是用来运行宏的)- 一个在当前目录下名为 "ID" 的标识符数据库。你可以用 shell 命令 "mkid file1 file2 .." 来创建它。把这些添加写你的 .vimrc文件中: > map _u :call ID_search()<Bar>execute "/\\<" . g:word . "\\>"<CR> map _n :n<Bar>execute "/\\<" . g:word . "\\>"<CR> function! ID_search() let g:word = expand("<cword>") let x = system("lid --key=none ". g:word) let x = substitute(x, "\n", " ", "g") execute "next " . x endfun使用的时候,把光标放在一个单词上,敲入 "_u",然后 vim 会读入含有这个单词的文件。使用 "n"查找这个单词在相同文件中下一次的出现的地方。使用 "_n" 可以跳转到下一个文件。这写操作已经使用 id-utils-3.2(这是位于距你最近的 gnu ftp 镜像服务器上的档案名称)测试通过了。[这个的想法来自于 Andreas Kutschera]==============================================================================在 xterm 中切换屏幕 *xterm-screens* *xterm-save-screen*(来源:comp.editors, 作者:Juergen Weigert, 回答一个问题的时候):> 另一个问题就是退出 vim 后,屏幕内容就被留在那儿了,也就是说:我刚刚正在:> 查看(或编辑)的内容就被留在屏幕上了。我此前执行的命令(例如:"ls")的输出:> 就不见了,即在滚屏缓冲里不存在了。我知道有个办法可以在退出 vim 或其他类似:> 于 vi 的编辑器的时候恢复屏幕内容,但是我不知道该如何操作。请帮助我,谢谢!::我认为可能有人可以回答这个问题。我认为 vim 和 vi 在某个特定:的 xterm 安装下和别的程序一样工作。他们并不一定完全相同,因为这牵扯到一个 termcap 对 terminfo 的问题。你们应该知道针对一种特定的终端,有2种数据库可以用来描述它的属性: termcap 和 terminfo。当它们中的条目不同,而且以上问题中的一个程序使用 terminfo,另一个使用 termcap时,两个程序会出现差异(请参见: |+terminfo|)。在你的问题中,你可能需要以下的控制序列:^[[?47h 和 ^[[?47l。他们用来在 xterm和主屏幕缓冲中轮流切换。如果你希望工作得更加有效率,如下的命令序列 > echo -n "^[[?47h"; vim ... ; echo -n "^[[?47l"可能就是你所需要的。(我用符号 ^[ 表示 ESC 字符,往后你还会看到数据库使用 \E来表示它)。 在启动的时候,vim 把 termcap 中变量 ti (terminfo:smcup)的值显示在终端上。退出的时候,它显示 te (terminfo: rmcup) 的值。这样一来,这2个变量正好处于以上所述的控制序列需要被执行的位置。把你的 xterm termcap 条目(在 /etc/termcap 中)和 xterm terminfo 条目(用 /usr/5bin/infocmp -C xterm 得到)比较一下。两者应该都会有与下面类似的条目: > :te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:附:如果你发现了任何差异,那么最好让某人(或许是你的系统管理员)彻底的检查 一下 termcap 和 terminfo 的一致性。NOTE 1: 如果你在 feature.h 中定义了 FEAT_XTERM_SAVE 之后又重新编译了 Vim,那么内置的 xterm 会有上述的 "te" 和 "ti" 条目。 NOTE 2: 如果你希望禁止屏幕切换,并且不希望改变你的 termcap,你可以在你的.vimrc 文件中加入这一行: > :set t_ti= t_te===============================================================================在插入模式下滚屏 *scroll-insert*如果你处于插入模式下并且希望看一些恰好在屏幕范围以外的东西,你可以使用 CTRL-XCTRL-E 和 CTRL-X CTRL-Y 来滚屏。 |i_CTRL-X_CTRL-E|为了使这个简单些,你可以用这些映射: > :inoremap <C-E> <C-X><C-E> :inoremap <C-Y> <C-X><C-Y>(逐字敲入这些字符,并确认 '<' 标志不在 'cpoptions' 选项中)。不过这样你就不能使用从光标上一行/下一行拷贝文字的功能了 |i_CTRL-E|。你还可以考虑把 'scrolloff' 设置得大一些,这样你就总能看到光标附近的上下文了。如果 'scrolloff' 的值大于窗口高度的一半,在向上或向下移动光标时,文字会上下卷动,但是光标会始终停留在屏幕中间的位置。==============================================================================平滑的滚屏 *scroll-smooth*如果你希望你的滚屏更加平滑一些,你可以使用以下的映射: > :map <C-U> <C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y> :map <C-D> <C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E>(逐字敲入这些字符,并确认 '<' 标志不在 'cpoptions' 选项中)。==============================================================================纠正普通的录入错误 *type-mistakes*如果有一些单词你总是敲错,你可以使用缩写来改正它们。例如: > :ab teh the :ab fro for==============================================================================统计单词,行数等 *count-items*如果需要统计缓冲中一个模式(pattern)出现的频率,需要把 'report' 置为0,然后用替换命令把模式替换成它自己。Vim 报告的已替换的数目就是模式出现的次数。例: > :set report=0 :%s/./&/g characters :%s/\i\+/&/g words :%s/^ lines :%s/the/&/g "the" anywhere :%s/\<the\>/&/g "the" as a word你可能希望复位 'hlsearch' 或者使用 ":nohlsearch"。如果 'modifiable' 选项是关的,这些就失效了。另一种办法就是在 Visual 模式下使用|v_g_CTRL-G|。 *count-bytes*如果你想数字节数,你可以这样做: 选中那些字符(块选择也可以) 使用 "y" 来拷贝这些字符 使用 strlen() 函数: >
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -