Vim必知必会
VI/VIM作为Nix环境的常用编辑器,有一些常用命令/用法.
由于平时用VSCode/SublimeText比较多,以至于切换到vi经常需要查阅,特记录与此.
命令行用法
# 以只读方式打开
vi -R filename
# 从某行打开
vi +linenumber file.py
#修改当前路径
gvim -c "cd ~/workspace"
导航
- 切换Tab: Ngt (N是页码)
- 跳转到某行 :NG或Ngg或:N (N代表行数)
常用快捷键
快捷键 | 说明 |
---|---|
zz | 移动当前行到屏幕中间 |
zt | 移动当前行到屏幕顶部 |
zb | 移动当前行到屏幕底部 |
z. | 把鼠标当前行放到屏幕中央 |
Ctrl-y | 上移屏幕一行, 只 |
Ctrl-e | 下移屏幕一行 |
Ctrl-u | 向上移动光标屏幕1/2页面 |
Ctrl-d | 向上移动光标屏幕1/2页面 |
Ctrl-b | 向前翻页,光标移到最后一行 |
Ctrl-f | 向后翻页,光标移到第一行 |
Ctrl+C 或 Ctrl+[ | Esc |
‘zt’, ‘zz’ 和 ‘zb’ 会保持当前光标位置, 但移动视野使其在屏幕的’t’op, ‘z’ center, 或 ‘b’ottom 位置.
‘H’ighest, ‘M’iddle, ‘L’ower 屏幕行
设置命令
# 执行命令
!! 等同于 :.! 或Ctrl-z + fg
#显示行号/自动缩进/忽略大小写/显示结束行和tab标识/显示换行符
:set number/ai/ic/list/wm
# 关闭显示
set nu!
:set nonumber
#高亮搜索,关闭:noh;实时显示匹配
:set hlsearch incsearch 简写 set hls is
# 忽略大小写
:set ignorecase smartcase
# 用sudo保存只读文件(经常用到的一个命令)
:w !sudo tee %
# 设置终端为vi 模式
:set -o vi
#切换工作路径
:cd ~/workspace
# 将当前编辑文件第 # 行至第 # 行的內容保存到文件FILENAME
:#,#w FILENAME
# 读取 FILENAME文件 并将其插入到当前文件的光标位置后面
:r FILENAME
# 重复上一次变更
. (period)
编辑内容
# 复制和粘贴
"ayy (内容存放在寄存器 ") / "ap
查找
搜索光标处单词
- *(向前) 或#(向后)
- q/ 或/Ctrl-f (== find)
- /之后用上下方向键
替换
:[address]s/search-string/replacement-string[/g]
- address 为一个行号或者是用逗号隔开的两个行号。句点 (.) 代表当前行。可以使用标记或者搜索字符串表示行号。
- %代表当前文件
- search-string 可以是正则表达式或简单的字符串
- g 表示进行全局替换 ( 针对一行可能执行多次替换 )
# 几个例子
# 替换当前文件所有并确认,global
:%s/old/new/gc
# 列出所有行
:g/old/p
:g/old/s//new/gp
# 匹配整个单词
:s/\<bar\>/baz
批量替换 :
:args *.[ch] # 替换所有*.c和*.h文件
:argdo %s/<my_foo>/My_Foo/ge | update
# e 忽略没有找到的错误
# update 写入修改
定制
设置字体
- Linux: set guifont=DejaVu Sans Mono 10
- Windows :set guifont=DejaVu Sans Mono:h10
Troubleshooting
Q: 终端显示颜色失败 A: export TERM=xterm-256color
Q: Ubuntu下中文菜单不能显示 A: $sudo cp /usr/share/vim/vim72/lang/{menu_zh_cn.utf-8.vim,menu_zh_cn.utf8.vim}
Q:使用Taglist(Ctag)报错 A: apt-get install exuberant-ctags 或在WIndows把ctags.exe放到vim根目录