基本操作#
命令行模式#
:q退出(关闭窗口):w保存(写):wq保存然后退出:e {文件名}打开要编辑的文件:ls显示打开的缓存:help {标题}打开帮助文档:help :w打开:w命令的帮助文档:help w打开w移动的帮助文档
移动 - 多数情况在正常模式#
- 基本移动:
hjkl(左,下,上,右) - 词:
w(下一个词),b(词初),e(词尾) - 行:
0(行初),^(第一个非空格字符),$(行尾) - 屏幕:
H(屏幕首行),M(屏幕中间),L(屏幕底部) - 翻页:
Ctrl-u(上翻),Ctrl-d(下翻) - 文件:
gg(文件头),G(文件尾) - 行数:
:{行数}<CR>或者{行数}G({行数} 为行数) - 杂项:
%(找到配对,比如括号或者 /* */ 之类的注释对) - 查找:
f{字符},t{字符},F{字符},T{字符}- 查找 / 到向前 / 向后在本行的 {字符}
,/;用于导航匹配
- 搜索:
/{正则表达式},n/N用于导航匹配
选择 - 可视化模式#
- 可视化:
v - 可视化行:
V - 可视化块:
Ctrl+v
编辑#
i进入插入模式- 但是对于操纵 / 编辑文本,不单想用退格键完成
O/o在之上 / 之下插入行d{移动命令}删除 {移动命令}- 例如,
dw删除词,d$删除到行尾,d0删除到行头。
- 例如,
c{移动命令}改变 {移动命令}- 例如,
cw改变词 - 比如
d{移动命令}再i
- 例如,
x删除字符(等同于dl)s替换字符(等同于xi)- 可视化模式 + 操作
- 选中文字,
d删除或者c改变
- 选中文字,
u撤销,<C-r>重做y复制 / “yank” (其他一些命令比如d也会复制)p粘贴- 更多值得学习的:比如
~改变字符的大小写
计数#
3w向前移动三个词5j向下移动 5 行7dw删除 7 个词
修饰语#
你可以用修饰语改变 “名词” 的意义。修饰语有 i,表示 “内部” 或者 “在内 “,和 a,表示” 周围 “。
ci(改变当前括号内的内容ci[改变当前方括号内的内容da'删除一个单引号字符串,包括周围的单引号
演示#
# fizzbuzz.py
import sys
def fizz_buzz(limit):
for i in range(1,limit+1):
if i % 3 == 0:
print('fizz', end="")
if i % 5 == 0:
print('buzz', end="")
if i % 3 and i % 5:
print(i)
else:
print()
def main():
fizz_buzz(int(sys.argv[1]))
if __name__ == '__main__':
main()
.重复上一次修改sys.argv[1]传入的第一个参数
自定义 Vim#
- missing-semester
- Anish
- Jon (uses neovim)
- Jose
vim ~/.vimrc
vim /etc/vim/vimrc # debian
扩展 Vim#
常用推荐插件:
- ctrlp.vim: 模糊文件查找
- ack.vim: 代码搜索
- nerdtree: 文件浏览器
- vim-easymotion: 魔术操作
讲师们的开源配置文件:
其他程序的 Vim 模式#
Shell#
Bash set -o vi
Zsh bindkey -v
Fish fish_vi_key_bindings
通用 export EDITOR=vim
Readline#
vim ~/.inputrc
vim /etc/inputrc # debian
set editing-mode vi # 开启vi编辑模式,python REPL 支持Vim快捷键
Vim 进阶#
搜索和替换#
:s (替换)命令(文档)。
%s/foo/bar/g- 在整个文件中将 foo 全局替换成 bar
%s/\[.*\](\(.*\))/\1/g- 将有命名的 Markdown 链接替换成简单 URLs
多窗口#
- 用
:sp/:vsp来分割窗口 - 同一个缓存可以在多个窗口中显示。
宏#
q{字符}来开始在寄存器{字符}中录制宏q停止录制@{字符}重放宏- 宏的执行遇错误会停止
{计数}@{字符}执行一个宏 {计数} 次- 宏可以递归
- 首先用
q{字符}q清除宏 - 录制该宏,用
@{字符}来递归调用该宏 (在录制完成之前不会有任何操作)
- 首先用
- 例子:将 xml 转成 json (file)
- 一个有 “name” / “email” 键对象的数组
- 用一个 Python 程序?
- 用 sed / 正则表达式
g/people/d%s/<person>/{/g%s/<name>\(.*\)<\/name>/"name": "\1",/g- …
- Vim 命令 / 宏
Gdd,ggdd删除第一行和最后一行- 格式化最后一个元素的宏 (寄存器
e)- 跳转到有
<name>的行 qe^r"f>s": "<ESC>f<C"<ESC>q
- 跳转到有
- 格式化一个的宏
- 跳转到有
<person>的行 qpS{<ESC>j@eA,<ESC>j@ejS},<ESC>q
- 跳转到有
- 格式化一个标签然后转到另外一个的宏
- 跳转到有
<person>的行 qq@pjq
- 跳转到有
- 执行宏到文件尾
999@q
- 手动移除最后的
,然后加上[和]分隔符
扩展资料#
vimtutor是一个 Vim 安装时自带的教程- Vim Adventures 是一个学习使用 Vim 的游戏
- Vim Tips Wiki
- Vim Advent Calendar 有很多 Vim 小技巧
- Vim Golf 是用 Vim 的用户界面作为程序语言的 code golf
- Vi/Vim Stack Exchange
- Vim Screencasts
- Practical Vim(书籍)
课后练习#
- 完成
vimtutor。备注:它在一个 80x24(80 列,24 行) 终端窗口看起来效果最好。 - 下载我们提供的 vimrc,然后把它保存到
~/.vimrc。 通读这个注释详细的文件 (用 Vim!), 然后观察 Vim 在这个新的设置下看起来和使用起来有哪些细微的区别。 - 安装和配置一个插件: ctrlp.vim.
- 用
mkdir -p ~/.vim/pack/vendor/start创建插件文件夹 - 下载这个插件:
cd ~/.vim/pack/vendor/start; git clone https://github.com/ctrlpvim/ctrlp.vim# 下载后需在 vimrc 中添加如下配置 set runtimepath^=~/.vim/pack/vendor/start/ctrlp.vim
3. 阅读这个插件的 [文档](https://github.com/ctrlpvim/ctrlp.vim/blob/master/readme.md)。尝试用 CtrlP 来在一个工程文件夹里定位一个文件,打开 Vim, 然后用 Vim 命令控制行开始 `:CtrlP`. 4. 自定义 CtrlP:添加 [configuration](https://github.com/ctrlpvim/ctrlp.vim/blob/master/readme.md#basic-options) 到你的 `~/.vimrc` 来用按 Ctrl-P 打开 CtrlP - 用
- 练习使用 Vim, 在你自己的机器上重做 演示。
- 下个月用 Vim 完成_所有的_文件编辑。每当不够高效的时候,或者你感觉 “一定有一个更好的方式” 时, 尝试求助搜索引擎,很有可能有一个更好的方式。如果你遇到难题,可以来我们的答疑时间或者给我们发邮件。
- 在其他工具中设置 Vim 快捷键 (见上面的操作指南)。
- 进一步自定义你的
~/.vimrc和安装更多插件。
使用vim-plug安装插件:- 安装 vim-plug
$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim- 修改~/.vimrc
call plug#begin() Plug 'preservim/NERDTree' #需要安装的插件 NERDTree Plug 'wikitopian/hardmode' #安装 hardmode ..... # 更多插件 call plug#end()- 在 vim 命令行中执行
:PlugInstall
- (高阶)用 Vim 宏将 XML 转换到 JSON (例子文件)。尝试着先完全自己做,但是在你卡住的时候可以查看上面宏 章节。