惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Comments on: Blog
GbyAI
GbyAI
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
人人都是产品经理
人人都是产品经理
F
Full Disclosure
IT之家
IT之家
Know Your Adversary
Know Your Adversary
Engineering at Meta
Engineering at Meta
K
Kaspersky official blog
T
Tor Project blog
V
Visual Studio Blog
S
SegmentFault 最新的问题
P
Proofpoint News Feed
V
Vulnerabilities – Threatpost
T
True Tiger Recordings
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The Hacker News
The Hacker News
MyScale Blog
MyScale Blog
Latest news
Latest news
Blog — PlanetScale
Blog — PlanetScale
Cyberwarzone
Cyberwarzone
Stack Overflow Blog
Stack Overflow Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
Project Zero
Project Zero
AWS News Blog
AWS News Blog
Martin Fowler
Martin Fowler
F
Fox-IT International blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Scott Helme
Scott Helme
C
Check Point Blog
博客园 - Franky
P
Proofpoint News Feed
S
Securelist
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
U
Unit 42
P
Privacy & Cybersecurity Law Blog
NISL@THU
NISL@THU
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
D
Docker
Hacker News - Newest:
Hacker News - Newest: "LLM"
WordPress大学
WordPress大学
李成银的技术随笔
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
Schneier on Security
N
Netflix TechBlog - Medium

Posts on WKLKEN THINKING

ai 编程实践 apisix 中的 lrucache apisix 中的服务发现机制 apisix 中的负载均衡 apisix etcd机制 apisix 中的 DNS 解析 如何减少打断提升效率 控糖革命 聊聊项目架构调整 聊聊框架 关于 k8s 的 zero downtime deployment 一些建议 apisix 遇到的一些问题 关于在除夕前一天换了一个洗衣机的故事 Django DRF 性能优化 DRF 的一些实践 Part1: Serializer DRF继承关系图 Better Code: 关于接口的灵活性 新的仓库: wklken/naming 缓存使用的一些经验 Better Code: 抽象: 可扩展性与可维护性的抉择 Better Code: 异常时, 该提示用户哪些信息? Better Code: 更好的异常日志打印 Go: some libs Go: go-redis/cache升级的坑 Go: logrus性能提升 Go: gin validation 远程办公的一点总结 Go: 开发过程中的一些bug 项目管理实践: 风险驱动开发 Go: 一种error wrap调用链处理方式 漫谈技术选型 Go: 基于 apitest 做handler层单元测试 Go: go-sql-driver interpolateparams参数优化 Go: 基于 Ginkgo 框架进行单元测试实践 摘录-架构整洁之道 Better Code: 使用property 读书笔记-遗留系统重建实战 [分享]深度工作 你需要更多的思考时间 Django项目重构小结 工作七年小结: 学习,生活及其他 [分享]bash日常: bash-utils 极客时间推广海报 2017总结: 予时光以意义 k8s APIServer源码: api注册详细细节 k8s APIServer源码: api注册主体流程 k8s APIServer源码: 服务启动 k8s APIServer源码: go-restful框架 重构 - 读书笔记(Python示例) 写给新人的沟通建议 vim 杂谈 - 关于快速编辑 读书笔记-重构: 章11 处理概括关系 读书笔记-重构: 章10 简化函数调用 读书笔记-重构: 章9 简化表达式 读书笔记-重构: 章8 重新组织数据 读书笔记-重构: 章7 在对象之间搬移特性 读书笔记-重构: 章6 重新组织函数 Python 代码规范小结 [分享]关于vim ElasticSearch集群部署文档 Logstash+ElasticSearch处理mysql慢查询日志 [分享]关于代码调试DE那些事 Logstash+ElasticSearch+Kibana- 实现相对通用的数据收集分析 ELK维护的一些点(二) [分享]Python源码剖析-数据结构 一些Centos Python生产环境的部署命令 摘录<<6个月学会任何一种外语>> ELK 维护的一些点 也许是一个新的开始 一些vim的个性化配置 读书笔记-调试九法 这段时间的一些想法 Python 源码阅读 - 垃圾回收机制 我为什么要写博客 APUE笔记-第一章 UNIX基础知识 Python源码阅读-闭包的实现 Python源码阅读-内存管理机制(二) Python源码阅读-内存管理机制(一) Python-基础-数据结构小结 '活动'设计的一些trick 一些简单的Python测试题 我的tmux配置及说明【k-tmux】 Review and Restart 工作四周年小结 vim插件: surround & repeat[成对符号编辑] vim插件: gundo[时光机] vim插件: expand-region[区域选中] vim插件: quickrun[快速执行] vim插件: trailing-whitespace[行尾空格处理] vim插件: closetag[成对标签补全] vim插件: ctrlp[文件搜索] vim插件: airline[状态栏增强] vim插件: theme[主题] vim插件: tagbar[大纲式导航] vim插件: nerdcommenter[快速注释] vim插件: rainbow_parentheses[括号高亮] vim插件: syntastic[语法检查] vim插件: delimitmate[符号自动补全] vim插件: matchit[成对标签跳转] vim插件: easy-align[快速对齐]
vim 杂谈 - 关于移动
2017-03-20 · via Posts on WKLKEN THINKING

这个专栏的主要目的, 是介绍后台开发, vim, python, 工具, 效率, 项目等等一些所思所想. 欢迎关注及交流.


k-vim 这个项目, 虽然一年只更新一两次, 但是里面很多配置, 都是基于使用中的痛点, 以及 符合自觉 的原则进行的变更.

整体而言, k-vim 虽然做成了一个开箱即用的配置, 但是很多使用者更想知道一些更具体的说明, 包含配置项, 配置原因等等.

之前有个blog有提过一句

Don’t put anything in your .vimrc you don’t understand!

虽然我不是十分赞同(我更倾向于基于一个完备的配置再进行深入了解和 DIY, 毕竟从0打造成本略高).

但是觉得有必要, 写一写, 谈一谈vim中的一些配置的原因.

目测会成系列, 从前到后你也能个性化自己的完整配置. 也可以借鉴一些技巧和插件使用(总共会提及约60+插件)

第一篇, 移动.

HJKL

一谈到移动, 首先想到的是hjkl, 最基本的上下左右

h 左移
l 右移

k 上移
j 下移 (记忆 jump)

当然, 左右只是字符间移动, 上下是行之间的移动

优化HJKL

首先, 为了防止自己情不自禁使用 上下左右 方向键, 可以禁用之.

" 关闭方向键, 强迫自己用 hjkl
map <Left> <Nop>
map <Right> <Nop>
map <Up> <Nop>
map <Down> <Nop>

其次, 当一行超长之后, se wrap, 一行就显示为多行(一个物理行 - 多个展示行), 如果是默认配置, 使用 jk 移动时, 将会是物理行维度的, 而直觉上应该在展示行维度跳转(视觉上), 所以加配置, 使得jk在展示行之间上下跳转

"Treat long lines as break lines (useful when moving around in them)
"se swap之后,同物理行上直接跳
nnoremap k gk
nnoremap gk k
nnoremap j gj
nnoremap gj j

另外, 当上下移动时, 默认光标到顶/到底后, 再用jk时, 光标是贴着终端顶部或底部的, 需要配置, 保证光标距离顶部或底部一定行数, 这样显示视觉效果更好.

" 在上下移动光标时,光标的上方或下方至少会保留显示的行数
set scrolloff=7

单词间移动

wbe, 原先是wWbBeE, 大小写都是有各自含义的, 但是, 更懒的做法, 只用小写wbe, 毕竟, 使用大写WBE, 你还得多按一个shift键, 以及, 肌肉记忆下, 操作的一瞬间, 你很难将你想要的和使用大写还是小写分别代表什么动作, 句子里哪个是标点关联起来.

所以, 直接无视大写吧

w 移到下一个单词 (记忆 next word)
b 移动到单词开头 (记忆 back)
e 移动到单词尾部

关于 0和$, 以及 HML 的优化

0$, 分别是

0 移动到行首
$ 移动到行尾

而, 0, 需要手指离开字母区, $更惨, 还得多按一个shift. 另外其实还有个^的, 实在按不着>_<#

HML 是同屏间, 快速移动到屏幕顶部/中间/底部, 顶部和底部还好, 中间到底在哪? 具体哪一行, 这个是比较范的操作, 非精确操作(不能一次性移动到想要的位置), 所以我的结论是: 废掉

H映射成移动到行首(最左边), 将L映射成移动到行尾(最右边), 和原先hjkl意义同, 且在字母区. 更符合直觉

" Go to home and end using capitalized directions
noremap H ^
noremap L $

行内: fFtT

f/F, 同一行内向前/向后跳转, 而t/T同, 只是会调到目标位置的前面一个字符

我的做法是, 忘掉tT, fF更符合直觉, 真正的指哪到哪, 而且f=find也好记

f  跳转到向前搜索的字母位置
F  跳转到向后搜索的字母位置

在这里, 推荐一个插件(被动生效), 可以高亮显示目标字母: quick-scope A Vim plugin that highlights which characters to target for f, F and family. No mappings are needed.

文件: 关于 ctrl + fbud

ctrl + f/b 下翻/上翻一页, 而ctrl + u/d 下翻/上翻半页.

我的做法是, 忘掉ctrl + f/b, 只用ctrl + u/d

我们经常做的操作是, 不停的上翻/下翻, 连续动作, 一整页太多, 看内容很容易思维上断开, 需要返回去重看, 而半页有一半的东西是连着的; 而对于使用压掌大法ctrl的人来说, 按住ctrl再反复fb, 特别是 b, 特别难按, fb都在左边, 左手太累

ud, 可以将操作放到两手, 也方便(肌肉)记忆

ctrl + u 上翻半页(记忆 up)
ctrl + d 下翻半页(记忆 down)

文件: 头尾和某一行

gg  跳转到文件头
G   跳转到文件尾

:n  精确移动到第几行

记住这三个, 基本够了吧?

分屏移动

ctrl + w + hjkl 是默认分分屏的快捷键, 去掉w更快些

" 分屏窗口移动, Smart way to move between windows
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l

插件: 标记跳转增强 vim-signature

默认, m + 字母, 可以在当前打一个标记, 然后 反引号+字母 可以跳转到标记行

但是存在的缺点是: 标记不可见, 且反引号实在难按

所以做了些增强

安装这个插件: vim-signature

具体安装/配置/演示: VIM插件: VIM-SIGNATURE(快速标记跳转)

" 交换 单引号/反引号, 使得可以快速使用 单引号 跳到marked位置
nnoremap ' `
nnoremap ` '

其常用的几个快捷键

" 显示marks - 方便自己进行标记和跳转
" m[a-zA-Z] add mark
" '[a-zA-Z] go to mark
" m<Space>  del all marks
" m/        list all marks
" m.        add new mark just follow previous mark

插件: 终极跳转 easymotion

有一个插件, 对跳转做了深入的定制, 那就是: vim-easymotion

安装了之后, 简直想怎么跳就怎么跳. 作为一个必备插件, 大家有必要深入学习下用法, 跳转效率翻倍

之前写的一篇博文介绍: VIM插件: EASYMOTION(快速跳转)

  • 用法1: 跳转到当前光标前后的位置(w/b)
  • 用法2: 搜索跳转(s)
  • 用法3: 行级跳转(jk)
  • 用法4: 行内跳转(hl)
  • 用法5: 重复上一次动作(.)

具体配置及演示见博文

其他

vim中跳转的配置大抵这些就够用了.

下一篇, 将介绍如何快速编辑. 后续还有搜索替换等等一系列内容