代码
调试技术
数据库
- 《Getting started with impala》
- 《mysql 必知必会》
- 《mysql 性能调优与架构实践》
- 《Mysql 技术内幕 InnoDB 存储引擎》
- 《Redis 实战》
- 《Redis 深度历险核心原理和应用实践》
- 《redis设计与实现》
- 《七周七数据库》
- 《深入浅出mysql》
- 《高性能mysql第三版》
- 《MySQL是怎样运行的》
前端
GOLANG
- 《1 The Go Programming Language》
- 《2 The Go Programming Language》
- 《3 The Go Programming Language》
- 《Build Web Application With Golang》
- 《Go101》
- 《Network Programming with go》
- 《Building Microservices With Go》
- 《Building Restful Web Services with Go》
- 《Concurrency In Go》
- 《Go In Action(Go 实战)》
- 《Go学习笔记语言详解》
- 《Go学习笔记源码剖析》
- 《Go语言编程》
JAVA
网络
心理学
PYTHON
创业
UNIX/LINUX
分布式
系统设计
搜索引擎
开发工具
- 《Practical Vim》
- 《Vim8文本处理实战》
- 《Learn vim scrpt the hard way》
- 《Pro Git》
- 《Mastering Vim》
- 《Mastering Vim Quickly》
思维
- 《专注力》
- 《为什么精英这样用脑不会累》
- 《刻意练习》
- 《如何想到又做到》
- 《学习之道》
- 《学习力》
- 《批判性思维工具》
- 《程序员的思维修炼》
- 《认知天性》
- 《超效率手册》
- 《高效程序员的45个习惯》
源码
网站架构微服务
- 《微服务架构设计模式》
- 《从0开始学架构》
- 《web scalavility for startup engineers》
- 《designdatainstensive_application》
- 《designdatainstensive_application2》
- 《clean_architecture》
- 《微服务实战》
- 《微服务设计》
软件工程/项目管理
运维
金融理财
写作
互联网
区块链
技术演讲网课
- 《哔哩哔哩的go微服务实战》
- 《go业务基础库之Error&Context》
- 《Go同步和并发设计模式》
- 《300分钟吃透分布式缓存》
- 《DDD实战课》
- 《分布式技术原理与实战45讲》
- 《架构设计面试精讲》
- 《高并发系统设计40问》
- 《java并发编程78讲》
- 《中间件核心技术与实战讲》
职场
《Mastering Vim Quickly》
5 Vim Concepts
常用模式(Modes):
- Normal mdoe
- insert mode
- command mode
- visual mode
11. Registers
"ayy
拷贝行到 a 寄存器 ,然后使用 "ap
粘贴,如果是大写的寄存器名称,会把内容 append 进去而不是替换
12. Buffers
buffer 是加载文件的内存区,直到保存文件才会从内存写入硬盘。
可以用 :ls
现实所有的 buffer,然后使用 :5b
打开序号为 5 的 buffer。
使用 ctrl-6
可以在两个 buffer 之间切换(依然是同一个窗口)。(当然不清楚为啥是 6 这个数字)
13. Windows, Tabs and Sessions
A window is a viewport on a buffer, a Tab page is a collections of windows.
可以使用 -o
参数为每个打开的文件显示一个 window,比如 vim -O file1.txt file2.txt
使用 :sp
:vs
可以横分屏和竖分屏
使用 ctrl-w h
也就是 h,j,k,l 可以在不同窗口之间切换。如果觉得麻烦可以映射
nnoremap <C-H> <C-W><C-H>
这样就可以使用 ctrl+h
来移动到左边的窗口了。
使用 ctrl-w J
大写字母可以移动当前窗口到最下方。
使用 :only
可以关闭所有其他的分屏
Session: 用来保存 vim 会话。 :mksession ~/mysession.vim
,可以 vim -S ~/mysession.vim
或者 进入vim之后 :source ~/mysession.vim
启动。
14. Macros
宏:用来记录一系列操作行为,并且能够重放。
- 使用 qa 开始记录内容到寄存器 a 中
- 再次按下 q 退出宏的录制
- 使用 @a 使用宏
- 使用 @@ 重复上次执行的宏
宏每次执行都会重绘,如果觉得慢可以使用 set lazyredraw
15. The power of Visual modes
块选配合命令模式。比如 块选多行之后执行 :normal A;
可以给选中行都加上分号,或者执行 dot 重复。
16. Mappings
设置映射(递归的)
:nmap v :version<cr>
:nunmap v
使用非递归版本 nnoremap
禁用某个键可以使用 :noremap <left> <nop>
17. Folding
使用 z 前缀折叠,foldmethod 常用折叠选项有 manual, indent, syntax
18. Effective multiple file editing
vim 批量操作:
:argdo
: for argument list, 比如 vim file1 file2,参数就是 file1, file2:bufdo
: for buffer list,对所有的缓冲区起作用,比如保存所有文件后推出。:bufdo wq
:windo
: for window list,只对可见区域的buffer 起作用
使用命令:
:normal[al]
- for running commands in Normal mode:exe[cute]
- for executing commands, 把字符串解释成vim命令,:execute "echom 'Hello world!'"
bufdo exe ":normal Gp" | update
向所有buffer 文件末尾粘贴内容。update 命令如果文件内容没有变不会更新文件时间戳(w会)
bufdo exe ":normal! @a" | w
向所有活动的buffer 执行宏
19. Productivity Tips
- Relative numbers: 相对行号,比如向下移动5行,5j,这个时候相对行号就比较直观。
set relativenumber
. 还可以让相对行号只在normal 模式起作用
augroup toggle_relative_number
autocmd InsertEnter * :setlocal norelativenumber
autocmd InsertLeave * :setlocal relativenumber
- Using the Leader Key: leader 提供了给vim映射定义命名空间的方式,比如使用 leader + w 来保存文件
let mapleader = "\<Space>"
nnoremap <Leader>w :w<CR>
- Automatic Completion: ctrl + n/p, ctrl+x ctrl+f 补全文件名
- Using File Template: 创建一个文件模板放到
~/.vim/templates/html.tpl
,然后:autocmd BufNewFile *.html 0r ~/.vim/templates/html.tpl
- Repeat The last Ex command: 可以用
@:
在mormal 模式下重复上一个 ex command
- Paste text while in insert mode:
ctrl-r 0
- Delete in Insert mode: ctrl+h 删除一个字符, ctrl-w 删一个单词, ctrl-u 删除一行
- Repeatable operations on search matches: 比如想查询后一个个修改
/string
之后 cw 修改单词然后n找到下一个用.
重复命令。可以使用 cgn 替代, c 执行修改,gn 向前找到下一个匹配并块选中。
- Copy lines without cursor movement:
:20,25co10
把 20-25行copy到 10 行下
- Move lines without cursor movement:
:6m28
第6行移到第28行,然后用''
移动回去之前的指针位置
- Delete lines without cursor movement:
5,10d
- Generating numbered lists: 生成序列
:put =range(1,10)
,甚至 ip 序列:for i in range(1,100) | put ='192.168.0.'.i | endfor
- Increasing or descreasing numbers: ctrl-a/x 可以递增或者递减数字 批量递增数字:
a[0] = 1
a[0] = 2
a[0] = 3
a[0] = 4
变成
a[1] = 1
a[2] = 2
a[3] = 3
a[4] = 4
使用 ctrl-v 块选中所有的 0,然后执行 g ctrl+a
完美解决。
- Clear highlighted searches:
nmap <silent> ,/ :nohlsearch<CR>
- Execute multiple commands at once:
%s/Atom/Vim/c | %s/bad/good/c
- External program intergration:
%!<command>
- Auto remove trailing whitespace: 笔者用了一个 StripWhitespace 插件来解决的
match ErrorMsg '\s\s+$'
autocmd BufWritePre * :%s/\s\+$//e
- Navigation through cursor history:
- Jumplist : 存储光标跳转的每个位置。ctrl-o ctrl-i 分别是向之前(backwards) 和之后(forwards) 跳转
- Changelist: 存储每个修改的可被 revert 的位置(with undo)。使用 g; 和 g, 向之前(backwards) 和之后(forwards) 跳转
-
. command will bring you to your last change. - `` which will bring you back to where the cursor was before you made your last jump. -
^ this is the position where the cursor was the last time when insert mode was stopped
上边几个方便的跳转命令(https://vi.stackexchange.com/questions/2001/how-do-i-jump-to-the-location-of-my-last-edit): 撇也可以用单引号替代(` -> ')
- Invert selection: 使用
:v
命令
:g/127.0.0.1/d 删除包含 127.0.0.1 的行
:v/127.0.0.1/d 删除不包含 127.0.0.1 的行
- Quickly switching buffers: vim 有个快捷键切换最后一个编辑的buffer。 ctrl-^ ,不是很方便。
" Jump back to last edited buffer
nnoremap <C-[> <C-^>
inoremap <C-[> <esc><C-^>
20. Plugins
使用插件管理器,书中推荐的是 Vundle,不过使用 dein 或者 vim-plug 支持并发管理,速度要快很多。安装过程看下github文档就好
https://vimawesome.com
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论