查看“Vimfaq”的源代码
来自Ubuntu中文
←
Vimfaq
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
本文转自水木社区vim版:http://www2.newsmth.org/bbsdoc.php?board=VIM 对本文如有意见和建议,欢迎访问水木社区 == 为什么别人的方法在我这里行不通? == 估计这是最难回答的一个问题了。:-) 不过首先应该确定你的VIM版本是否足够新,功能是否完整。使用 :version 命令查看你的VIM版本以及功能。 * 一个常见的情况,如果你用的是RedHat系统,请确定安装了vim-enhance的rpm包,否则将是不完整的VIM。 * 如果你用的ubuntu,确保安装了 vim-full == 如何找到上次编辑的文件? == Ctrl+O (按两次) == 如何复制粘贴? == === 复制 === '''方法一:''' 先ma标记当前位置为a,移动到新的位置,再y`a或者y'a复制从标记位置a到当前位置的内容。`和'的区别:`以字符为单位,'以行为单位。这个方法应该是所有vi都适用的。(如果不对请指正。) '''方法二:''' 按v或V或Ctrl+V进入visual模式,移动光标选择一段内容,按y(若要使用系统粘贴板,按"+y)。三者的区别: v以字符为单位,V以行为单位,Ctrl+V是块选择。这个方法只在VIM下适用。 === 粘贴 === p或P。区别:前者粘贴到光标後面,後者粘贴到光标前面。 == 如何在多个文件中进行替换? == 一般可以用sed或者vim来做。比如要对当前目录下的*.c文件进行替换: '''方法一:''' for i in *.c; do sed -i -e 's/oldvalue/newvalue/g' $i done '''方法二:''' vim *.c :argdo %s/oldvalue/newvalue/ge | update == 如何把fold一次全部打开? == zR 或者 :set foldlevel=999 * 全部关上是 zM == 如何选择、复制或者查找光标所在的单词? == 在VIM中用iw或者aw表示一个单词,两者稍有区别。 * 选择光标所在的单词:viw (v进入visual模式,然後iw) * 复制光标所在的单词:yiw 查找的话就是两个很常用的明令:# 和 * == 如何计数搜索的字符串? == 如果需要统计缓冲中一个模式(pattern)出现的频率。Vim 会报告已匹配的数目就是模式出现的次数。例: :%s/./&/gn characters :%s/\i\+/&/gn words :%s/^//n lines :%s/the/&/gn "the" anywhere :%s/\<the\>/&/gn "the" as a word 你可能希望复位 'hlsearch' 或者使用 ":nohlsearch"。 == 如何去掉高亮搜索? == 方法一::nohlsearch 方法二:/awertgvcxz (查找一个肯定不存在的字符串) 设置了高亮搜索(:set hlsearch)以後,可以通过 :set nohlsearch 永久地关闭高亮 显示,也可以通过 :nohlsearch 暂时关闭高亮显示,下次搜索时将自动恢复高亮。 == 如何解决linux下gvim中文菜单乱码问题? == 以vim6.3为例 :source $VIMRUNTIME/delmenu.vim :source $VIMRUNTIME/menu.vim 也可以将以上内容加入.vimrc 光source一个menu.vim或者啥也不source都是乱码 另外,也有网友报告说没有遇到此类问题 注:这里的source指的是vim自己的source命令,和bash shell的source无关 == 如何对所编辑的文件语法高亮显示? == 需要解释的是,VI有很多变种,它本身并没有这种功能,提供这种功能往往是其各种衍生版本,比如说vim。下面就vim中如何语法高亮简单解释一下。 首先,确定一下你所用的操作系统, * 如果是windows,那么默认的配置文件就可以工作了。如果还不行,可以用鼠标从syntax菜单下选择一下适合你的文件类型(新版本的gvim默认把文件类型选择关闭了,需要点开,然後按照开头字母选择类型) * 如果是linux,那么确认一下是否是redhat。如果是redhat,那么需要安装vim-enhanced的rpm包。这些都做了以後,可以用:syntax on来打开语法高亮。必要时可以用:set filetype=...来设定你的文件类型。 如果使用图形界面,比如gvim,那么syntax on和set filetype的操作可以用鼠标在菜单中选择,同windows下。 如果是在控制台中使用vim,还应当确定你的终端设置支持颜色。 == 如何快速插入多行数字0-99? == 在命令行中输入以下代码,或者先把代码保存到一个外部文件,然後source这个文件: let i = 0 while i < 100 put = i let i = i + 1 endw 如果位数不足需要在前面补零,可以用Ctrl-V块选择,然後I插入0。 若经常做的话,可以用插件VisIncr http://www.vim.org/scripts/script.php?script_id=670 这个到底怎么用 ,我怎么用不成功! == vim中文编码(乱码)问题 == ===原理=== ====编码相关的vim变量==== vim其中与编码相关的变量有4个分别是: 1.encoding 2.termencoding 3.fileencodings 4.fileencoding 关于这些变量的取值,可以进入vim后使用命令: <pre> :set 变量名 ? </pre> 来查询。 付变量赋值: <pre> :set 变量名=值 </pre> ====变量含义及默认值==== 关于这4个与vim编码相关的变量,他们的含义如下: 1.encoding vim内部处理文字时使用的编码方式。(你输入一个资,这个字在vim内部(内存中)用什么编码把你的字转化成什么样的数字(表示),就是由这一变量决定)。 其值默认为:当前终端环境下的LANG值。 2.termencoding 终端(term)编码(encoding),该变量是指vim内部把字符发送到终端(显示器)上使用什么编码。 默认:空 其默认值为空,表示从vim内部发送到终端显示时不经过编码转换,直接显示,这时vim的encoding变量是什么,终端就是什么,相当于termencoding这个变量的值与encoding这一变量值相等。(但可以用:set termencoding=utf-8命令设置给值为utf-8如此vim会把内部的字符从encoding的值转换成utf-8之后再发送到终端显示) 付:我在图形界面下的终端似乎只能显示utf-8编码的文字(其他为乱码,所以我设置该值为utf-8) 3.fileencodings 文件编码(复),其值默认有多个,表示在 读取文件时 可选的编码(解码)方式。 例如一个文件内容为:e6 88 91 0a 如何解释该内容?如果用utf-8解释是:我 而如果用gb2312解释则是乱码。 如果此时把fileencodings变量设制为euc-cn(gb2312的别名?)这一个,然后再打开该文件则会显示乱码。 这时如果你知道该文件是使用utf8编码的那把该变量设置为utf-8,再打开即可看到内容。(当然我想更多的时候也许并不知道文件是用什么编码编写的,我们可以给该变量设置多个值让vim自己自动决定用哪个来解码文件。而有时vim自动选择时选错了,我们也可以通过设置该变量来指定解码方式) 4.fileencoding 与上面的很相近,文件编码,其值只为1个,表示在写入时选用什么编码。 默认:空 其默认为encoding变量。即vim内部用什么数字表示,在写入文件时,直接把该数字写入,而不转码。 如通过set改变其值,则在文件写入时,vim会自动调用编码转换工具,把(内存中的)文字编码从encoding转成filencoding(再写入磁盘)。 以上是关于文件编码的4个变量。 如果不希望每次进入vim都要手动设置一遍,那可以写成一个.vimrc文件放在主目录中(如此,每次进入vim之前,vim都会自动运行一遍该文件。) ===方案=== 在.vimrc中作如下设置,可以实现界面以及显示字体采用gb2312,遇到utf8文件时自动做转换: set encoding=prc set fileencoding=prc set fileencodings=ucs-bom,utf8,prc 需要注意的是,按照上面的设置,如果你打开一个空的(0字节)或者是纯7bits的文件, 这时VIM将认为是utf8编码的文件,如果你往里面输入中文,存盘的时候也将是utf8。 因此你可能需要在存盘之前 :set fileencoding=prc 把编码改回来。 另外,对于纯7bits的文件,由于认成了utf8,每次打开存盘的时候都要做一次转换, 会比较慢,所以如果你很长一段时间不会接触utf8的话,可能暂时把 fileencodings 一行注释掉比较好。 [警告]:转换可能会造成信息丢失!如果你需要编辑的是重要的系统文件,最好把 fileencodings 一行暂时注释掉。 == 如何去掉或者插入^M这样的字符? == 在VIM的插入模式或者命令行中用<C-V>输入^M这样的特殊字符,例如输入 :%s/<C-V><C-M>//g 实际显示是 :%s/^M//g 就可以去掉文件中所有的^M。同理,要在文件中输入^M只要按<C-V><C-M>即可。 这个问题往往发生在WINDOWS/DOS系统和UNIX系统之间交换文件时,因为这两类系统 对于文本的“换行”概念解释不同。所以,还有一个解决方法就是对这类文本进行 转换。vim内部就可以做这件事情。首先打开文本,然後 set fileformat=unix 再从新保存该文件复盖原文件就可以去除:^M了 == 如何整体缩进一段代码(插入tab)? == 选中一段代码,< 或 > 或 2< 或 3> …… == 如何合并两行? == 合并两行的键是 J 另外,如果你设置了 set backspace=2 你就可以用backspace或者delete很方便的删到上一行或者下一行。 == 如何设置缩进距离(tab宽度)? == set tabstop=8 set shiftwidth=8 == 如何让VIM不生成备份文件(~文件)? == set nobackup 更多细节请看 :help backup。另外,也可以不关掉backup而是设置backupdir将备份文件统一存放到一个目录下,比如 set backupdir=C:\Program\ Files\Vim\tmp == 如何让打开文件时光标自动到上次退出该文件时的光标所在位置 == 将下面的语句放入vimrc中,就可以了 if has("autocmd") autocmd BufRead *.txt set tw=78 autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal g'\"" | \ endif endif 若是某一次这种需要,直接运行normal命令 `" == 如何让一个文件在原有的gvim中用新开的tab打开 == 在linux下可以这样打开 $gvim --remote-tab-silent filename 而在windows下,DOS下也可以象上面那样打开;而若是“双击”打开方式,则可以修改注册表HKEY_CLASSES_ROOT\Applications\gvim.exe\shell\edit\command将其键值修改为 "C:\Program Files\Vim\vim70\gvim.exe" -p --remote-tab-silent "%1" 而若是用鼠标右键中的“用 vim 编辑”,先删掉注册表中的HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\gvim,然後手工添加鼠标右键菜单,两种方式: * a. 直接进入注册表,在HKEY_CLASSES_ROOT\*\shell下添加项“用 vim 编辑”, 再在项“用 vim 编辑”下添加子项“command”,在其右边窗口把其键值设定为: "c:\Program Files\Vim\vim70\gvim.exe" -p --remote-tab-silent "%1" * b. 把下面的内容保存为文件gvim.reg,并将之导入注册表 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\Edit with &Vim] [HKEY_CLASSES_ROOT\*\shell\Edit with &Vim\command] @="\"c:\\Program Files\\Vim\\vim70\\gvim.exe\" -p --remote-tab-silent \"%1\"" 另外,也可以添加到鼠标右键中的“发送到” 方法:进入到目录c:\Documents and Settings\用户名\SendTo下,“鼠标右键”-“新建”-“快捷方式”,然後通过对话框的“浏览”找到gvim安转位置,这样就建立gvim 的一个快捷方式,右键单击这个快捷文件-属性-快捷方式,在“目标(T)”的地址栏写入: "C:\Program Files\Vim\vim70\gvim.exe" -p --remote-tab-silent "%*" 注意:上面都是默认安装gvim的地址,若不是默认地址,请自行修改 == 为什么文件很多行仅仅在每行开头显示个"@" == set dy=lastline == 在插入模式下Backspace怎么无法删除了 == set backspace=indent,eol,start == 如何选中一段文字并全文搜索这段文字? == vnoremap * y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> vnoremap # y?<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> == 如何为gvim/vim设置自己喜欢的字体? == 为 gvim 选择自己喜欢的字。点“编辑”-->“选择字体”, 然後在字体列表中选择一个你喜欢的字体和字号,然後确认。也可以用如下命令直接得到字体列表 set guifont=* 因 gvim 只能使用等宽字体, 故对话框列出的字体比你系统里安装的字体要少得多。这时可以用如下命令查询所选择的字体: :set guifont? 回显结果象这样子: guifont=Nimbus Mono L 14 若要设置某个字体为gvim启动後的默认字体,如上面例子,则在vimrc中如下设置 set guifont=Nimbus\ Mono\ L\ 14 ( 如果字体名称中含有空格, 需要在空格前面加上一个反斜杠) 而vim字体是由你所选择的终端所决定的,如:xterm,dos等,所以若想换console下vim的字体及字号,只能调整终端设置 == 如何发现/搜索非8位字符,如"“"? == /[^\x00-\xff]
返回
Vimfaq
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
登录
导航
首页
最近更改
随机页面
页面分类
帮助
搜索
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息