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

推荐订阅源

V2EX - 技术
V2EX - 技术
P
Privacy International News Feed
Security Latest
Security Latest
H
Hacker News: Front Page
T
Tenable Blog
The Hacker News
The Hacker News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Security @ Cisco Blogs
Project Zero
Project Zero
O
OpenAI News
AI
AI
Spread Privacy
Spread Privacy
C
CERT Recently Published Vulnerability Notes
The Last Watchdog
The Last Watchdog
G
GRAHAM CLULEY
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Scott Helme
Scott Helme
Application and Cybersecurity Blog
Application and Cybersecurity Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
CXSECURITY Database RSS Feed - CXSecurity.com
NISL@THU
NISL@THU
A
Arctic Wolf
T
Threat Research - Cisco Blogs
PCI Perspectives
PCI Perspectives
N
News and Events Feed by Topic
C
Cyber Attacks, Cyber Crime and Cyber Security
C
Cybersecurity and Infrastructure Security Agency CISA
Simon Willison's Weblog
Simon Willison's Weblog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Know Your Adversary
Know Your Adversary
Google Online Security Blog
Google Online Security Blog
罗磊的独立博客
L
LINUX DO - 最新话题
U
Unit 42
S
Security Affairs
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
博客园 - 【当耐特】
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
月光博客
月光博客
Engineering at Meta
Engineering at Meta
腾讯CDC
F
Full Disclosure
Cyberwarzone
Cyberwarzone
S
SegmentFault 最新的问题
Recorded Future
Recorded Future
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
The Cloudflare Blog

博客园 - 古月春秋(刘云涛)

打车抬表费用图 修正mysqlcc在MySQL 5.0上常报的 Table 'xxx' doesn't exist 错误 Perl中不寻常的 ?: 运算符 - 古月春秋(刘云涛) Ubuntu 5.10 下 Apache2 SSL 的配置方法 一行shell命令求素数 Boot FreeBSD from Windows boot loader Turtles - So Happy Together 关于IoC、低耦合、配置文件及其本质意义的思考 Perl与数据库 Perl无废话入门指南 W3C XSL Transformations (XSLT) Version 2.0 翻译计划 新版 apache_2.0.54 php-5.0.4 mysql-4.1.12a 组合安装向导(原创) Solaris 下安装Perl的DBD-mysql模块失败的原因以及解决办法 Why MSN Messenger ask me to verify email address all the time? SharpDevelop的AddInTree View 插件 SharpDevelop源码分析 (三、插件系统) SharpDevelop源码分析 (二、主程序+隐藏的初始化) SharpDevelop代码分析 (一、序+基本概念) 亚洲3S节目表
vi的一点小经验
古月春秋(刘云涛) · 2006-06-12 · via 博客园 - 古月春秋(刘云涛)

编辑:
把下一行挪到当前行的末尾,在Windows下很简单——在当前行末尾按del或者在下一行的开头按bs就可以了,
而在vi里面是要在当前行任意位置按J(大写的J,也就是Shift+j)

快速保存推出:
很多人习惯用标准的 :wq! 保存退出,不过我更喜欢按Shift+z+z,也就是ZZ,一样的。


查找:
/sometext 从当前向后找
?sometext 从当前向前找 (这两个命令执行后 按n继续向后找 按N继续向前找)
:g/sometext/

前者直接定位到单词上,后者仅仅是定位到那一行上

ex命令扩展:

vi下有一个ex命令模式可以用ex命令来进行快速编辑操作,基本的模式是:

[范围] g[lobal] /模式/ [ex命令] 在指定的“范围”内,对匹配“模式”的行执行“ex命令”

[范围] v[lobal] /模式/ [ex命令] 在指定的“范围”内,对匹配“模式”的行执行“ex命令”

  • 如果没有指定“范围”,则默认为全部。
  • 如果没有制定“ex命令”,则默认是显示结果。
  • “模式”即正则表达式。

“ex命令”在编辑方面,大致有 m(移动)s(替换)d(删除)

例子:

:g/^/m0 会从第一行开始把每一行移动到第一行之后,结果就是所有行逆序反转

:g/127.0.0.1/s/http/ftp/g     对包含127.0.0.1的行,将http替换为ftp

:g/127.0.0.1/s/^/\t/g         对包含127.0.0.1的行,每行之前加一个制表符(TAB)

:g/127.0.0.1/d                删除包含127.0.0.1的行

如果命令的内容中包含/字符,可以选择转义 \/ 或者把ex的命令分隔符/换成别的字符(例如~@#$%等)。例如要把包含/home的行中的/simon删除:

:g/\/home/ s/\/simon//g  用转义字符输入/

:g#/home#s#/simon##g 用#作为命令分隔符,则字符/可以直接使用了

查找-替换:
通常情况下查找替换的ex命令是
:%s/oldtext/newtext/g

下面是对这个命令的解释
: 表示进入ex的命令模式
% 是表示ex命令的source的范围. 后面的命令在该范围内执行. 该范围有多种表达方式:
    % 表示全文
    $ 表示到行尾
    . 表示当前行
    x,y 表示从第x行到y行, 例如 10,20s/oldtext/newtext/ 
    此外还可以用其它的ex搜索命令表达范围
    g/sometext/ 表示包含sometext的行
   
s 是ex的替换命令
/.../.../ 表示"搜索-替换"的内容.
g 是表示替换所有. 默认s只执行一次

-= 例子1 =-
:10,20s/^/    /    把第10到20行的前面加上4个空格
可以分解为  :  10,20  s  /^/    /

-= 例子2 =-
:g/small/s/^/#/   把所有包含small的行都加上注释#
g/small/ 查找包含small的行
/^/ 表示第一个非空白字符
可以分解为 g/small/   s   /^/#/