17 May 2016

打开及保存


命令

  • :set nu – 显示行号
  • :pwd -> print working directory 显示当前工作目录
  • :edit -> 编辑文件,可用Tab键进行智能补全
  • % -> 表示当前缓冲区的完整文件路径
  • :h -> 可以去除路径中的文件名,所以 %:h 表示当前缓冲区路径
  • :find -> 查找命令,仅查找vim的Path下的文件,可用path选项指定( :h path )
  • :set path+=app/** 若想让app/下的文件容易找到
  • . -> 代表当前工作目录
  • :edit . -> :e. 打开当前文件路径的管理器
  • :Explore -> :E 打开文件管理器
  • :!xxxxx -> 执行外部命令

技巧

  • 当前文件包含新文件夹路径,不能直接保存:

    :!mkdir -p %:h :w

  • 当前文件只读或权限不够

    :w !sudo tee % > /dev/null

寄存器操作

Win意义下的Ctrl-cCtrl-v操作的是系统剪切板,即寄存器 + , 在vim中的复制y,粘贴p默认操作的是寄存器 0,因此:

  • Ctrl-c <—> 命令模式下用 "+y
  • Ctrl-v <—> 命令模式下用"+p 插入模式下用 <Ctrl-r>'+'

也就是说要引用某一寄存器在命令模式下用"{寄存器}p,在插入模式下用<Ctrl-r>{寄存器}

另外 P 表示向前粘贴。

特殊寄存器

  • "" - 无名寄存器,即使用dcsxyp操作的寄存器
  • "0 - 复制专用寄存器,y专用
  • "_ - 黑洞寄存器,彻底清除内容
  • "+ - 系统剪切板, 在普通模式下使用 “+p 在插入模式下用 + 实现粘贴
  • "* - 主剪切板 X11 系统专用
  • "= - 表达式寄存器,该寄存器内容会实现计算

特定寄存器

  • "% - 当前文件名
  • "# - 轮换文件名
  • ". - 上次插入的文本
  • ": - 上次执行的Ex命令
  • "/ - 上次查找的模式

跳转

  • <C-i>/<C-o> – 前进/后退,注意:<C-i>Tab 效果相同
  • [count]G – 跳转到指定行
  • G – 跳转到最后一行
  • gg – 跳转到第一行
  • <C+f> – 屏幕『向下』移动一页,相当于 [Page Down]按键
  • <C+b> – 屏幕『向上』移动一页,相当于 [Page Up] 按键
  • <C+u> – 屏幕『向上』移动半页,常用
  • <C+d> – 屏幕『向下』移动半页,常用
  • <C+e> – 屏幕『向下』移动一行
  • <C+y> – 屏幕『向上』移动一行
  • + – 光标移动到非空格符的下一列
  • - – 光标移动到非空格符的上一列
  • n<space> 那个 n 表示『数字』,按下数字后再按空格键, 光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。
  • n<Enter> n 为数字。光标向下移动 n 行(常用)
  • 0Home 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
  • $End 移动到这一行的最后面字符处(常用)
  • /pattern /?pattern n N –跳转到下/上一个模式出现处
  • % – 跳转到匹配的括号所在处
  • (/) – 跳转到上一句/下一句的开头
  • {/} – 跳转到上一段/下一段的开头
  • H/M/L – 跳转到屏幕的最上方/中间/最下方
  • gf – 跳转到光标下的文件名
  • <C-]> – 跳转到光标下关键字定义处
  • ‘{mark} / `{mark} – 跳转到一个位置标记
  • u<C-r> – 最终将光标跳转到上次修改过的地方
  • :changes – 显示当前文件的改变历史列表
  • g; / g, – 正向或反向遍历改变列表

特殊标记位置

  • ` - 当前文件中上次跳转动作之前的位置
  • . - 上次修改的地方
  • ^ - 上次插入的地方

其他

gf命令跳转到指定文件时需要设置:

  1. suffixesadd变量下添加相应的文件后缀名
  2. path变量下添加路径

在设定标记时小写标记只在当前有效,大写标记全局有效。 如: ma mA

范围

  • [range] 范围描述->{起始行},{终止行}
  • 符号 . 代表当前行;
  • 符号 0 代表文件第0行,并不存在;
  • 符号 1 代表文件第1行;
  • 符号 $ 代表末行;
  • 符号 % 代表当前文件所有行
  • 符号 ‘‘m’ 代表包含位置标记m的行
  • 符号 [:'<,'>],代表高亮选区行

  • 另外:模式指定范围指的是字符串可以代替{起始行}及{终止行}, 例如[:/<html>,/<\/html>/p 会选中以<html>开头到</html>的区域.而且可以接受+-的偏移

  • @: 重复Ex命令

  • :[range]delete [x] - 删除指定范围行内容到寄存器x
  • :[range]yank [x] -
  • :[line] put [x] -
  • :[range]copy {address} - 将指定范围行复制到{address}行下 –> 简称为:[range]t {address}
  • :[range]m[ove] {address} - 将指定范围行移动到{address}行下
  • :[range]join - 将指定范围行连接
  • :[range]normal {commands} - 对指定范围每行执行命令{commands}
  • :[range]s[ubstitute]/{pattern}/{string}/[flags] - 将指定范围行内出现{pattern}的地方替换为{string}
  • :[range]global/{pattern}/[cmd] - 对指定范围内匹配{pattern}的行执行Ex命令[cmd]
  • :[range]p[rint] - 在命令行下回显指定范围
  • :q[uite] -退出

  • :!shell - 启动交互shell会话,用exit回到vim
  • :!{cmd} - 执行外部命令
  • :read !{cmd} - 执行并将标准输出插入到光标下方
  • :[range]write !{cmd} - 执行并将指定范围作为输入
  • :[range]!{cmd} - 将指定范围内容输入cmd,将输出替换掉指定范围,即用cmd来过滤指定范围内容

python调试的技巧,使用命令

  • :w[rite] | !python %

排序当前文件

  • :%!sort [-t','] [-k2] – 其中 -t’,’ 表示用’,’作为分隔符, -k2 表示对第二列排序

其他

  • q/ - 打开查找命令历史的命令行窗口
  • q: - 打开Ex命令历史的命令行窗口
  • <C-f> 从命令行模式切换到命令行窗口

补充:在bash shell中可以用<C-z>挂起当前作业,用$jobs查看当前挂起,用fg唤醒挂起的作业

查找替换

查找

…..

替换:

  • :s[ubstitute]
  • 先查找一段文本然后用另一段文本替换掉。
  • :[range]s[ubstitute]/{pattern}/{string}/{flags}
  • flags:
    • g - 全局范围(当前整行范围)
    • c - 对每一次替换进行确认
    • n - no不进行替换行为

替换中的特殊字符:

  • \r - 换行符
  • \t - 制表符
  • \\ - 反斜杠
  • \1 - 第1个匹配 1-9
  • \0 - 插入匹配模式的所有内容
  • & - 上一次的替换标记
  • ~ - 上一次调用使用的{string}
  • \={Vim script} - 执行{Vim script}表达式并将返回结果作为替换
  • <C-r>{regist} - 插入指定寄存器内容
  • 在Vim脚本中可用@{register}来引用寄存器内容
  • Vim中可用 :let @{} 来给寄存器赋值

其他

特殊符号:

[Esc] 退出到普通模式,与 [Ctrl]+'[' 功能相同

n+ 向前(下)移动n行

n- 向后(上)移动n行

. - 重复上一次的动作

; - 重复ftFT

, - 回退ftFT

& - 重复替换,用u回退例如”:s/target/replacement”

@x - 重复一系列修改用u回退,例如”qx{changes}q”

* - 移动到光标所在单词的下一个出现位置

> - 增加缩进(指定行),或用G表示所有行

< - 减小缩进

= - 自动缩进

! - 用外部程序过滤指定行

( - 移至上一个或当前代码块的起始字符处

) - 移至下一个代码块的起始字符处

{ - 移至上一个或当前代码块前紧跟的空白行

} - 移至下一个或当前代码块后紧跟的空白行

/ - 向前搜索,用Nn重复

? - 向后搜索,用Nn重复

0 - 数字0,移动到本行的0位置,即行首

$ - 行尾

动作:小写字母

a - append 追加

b - back begin of word 上一个单词的起始

c - change 改变

d - delete 删除

e - end of word 到下一个单词的结尾,w是到下一个单词的起始

f - find 查找(本行),用’;’来重复、’,’来回退

g - ? –>ge 移动到上一个单词的结尾,gE移动光标到上一个字串的结尾,g~反转大小写,gu转为小写,gU转为大写。

h - ← 向左移动

i - insert 插入

j - ↓ 向下移动 同[Ctrl]+’n’ Next Line

k - ↑ 向上移动 同[Ctrl]+’p’ Previous Line

l - → 向右移动

m - ?

n - next 下一个搜索匹配项

o - other line 在当前行下另开一空行,并进入编辑模式

p - pause 粘帖

q - ? –>q/ 和 q? 命令,在窗口最下面打开一个查找历史记录窗口

r - replace 替换(单个字符)

s - substitute 删除当前字符或指定字符数后进入插入模式

t - to 到字符*面前,用’;’来重复、’,’来回退

u - undo 撤消

v - visual 可视(选择)模式

w - word 到下一个单词的起始,e是到下一个单词的结尾

x - x 剪切右边的,因为它长得像个叉

y - yank 复制

z - ?–>把光标所在行移动窗口的顶端、中间或底部:zt、zz、zb

名词:

w - word 单词 如’d2w’表示删除2个单词,注意’.’也是一个单词

l - letter 字符 如’d2l’表示删除2个字符

p - paragraph 段落

动词:

A - Append to Line 添加到行尾

B - Back Begin of words 移动光标到上一字串起始

C - Change Line 改变,重写当前行,与cc不同在于C会保持缩进,而cc会退到0位置。

D - Delete Line 删除当前行,与dd的不同在于,dd是逻辑上删除,即后面的行会跟进使得看起来连贯,D是形式上的删除,后面的行不会跟进看起来会有个’坑’,但不会改变后面代码的行号。

E - End Words 移动到下一字串的结尾。

F - Find 行内查找上一个指定字符。用’;’来重复、’,’来回退

G - Go End Of File 到当前文件的底部。可以指定行号,例如:”nG”表示光标移动到第n行

H - Hight of Window 到当前窗口的第一行,gg则是到当前文件的第一行。

I - Insert 在当前行首插入

J - Jion Line 连接当前行与下一行

K - ?

L - Low of Window 到当前窗口最后一行,HML是一组

M - Middle of window 到当前窗口中间行,HML是一组

N - Next 是next的反向,上一个搜索匹配项。

O - Other 新起一行,只不过在当前行上方,与o反向

P - Pause 粘帖,与p反向(粘帖到左边)

Q - Quit 进入EX:模式

R - Replace 连续替换模式,i只是替换一个字符

S - Substitute 删除当前行或指定的行数后进入插入模式

T - 行内查找上一个指定字符。用’;’来重复、’,’来回退

U - Undo 重做的反向,即还原

V - Visual 可视(选择)模式

W - Words 下个字串的起始

X - 剪切左边的,与x方向相反

Y - yank 复制当前行,跟yy差不多。

Z - ?



blog comments powered by Disqus