关闭

嵌入式 VIM自动排版和替换以及选中一列

916人阅读 评论(0) 收藏 举报
分类:

由于在.vimrc文件中设置了

filetype plugin indenton

set cindentshiftwidth=4

在SecureCRT中使用鼠标复制-粘贴时,代码的自动缩进导致每一行都比上一行缩进一个tab,手工调整很麻烦,幸好发现了vim的自动排版方法:

在命令行模式下,首先使用“gg”将光标移动到文档开头,然后使用“v”切换到可视模式,再用“G”将光标移动到文档尾部(相当于全选),最后使用“=”,即可完成整个文档的自动排版。

 

Vim多行缩进技巧

1.按v进入visual状态,选择多行,用>或<缩进或缩出

2. 通常根据语言特征使用自动缩进排版:在命令状态下对当前行用== (连按=两次),或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的codeformat。使用gg=G可对整篇代码进行排版。

3.gg   shift+G首尾
4.全文字眼替换  %s/source/dist/g 或者 :1,$s/source/dist/g
  :s/vivian/sky/ 替换当前行第一个 vivian 为sky

  :s/vivian/sky/g替换当前行所有 vivian 为 sky

  :n,$s/vivian/sky/ 替换第n 行开始到最后一行中每一行的第一个 vivian 为 sky

  :n,$s/vivian/sky/g 替换第n 行开始到最后一行中每一行所有 vivian 为 sky

  n 为数字,若 n 为.,表示从当前行开始到最后一行

  :%s/vivian/sky/(等同于:g/vivian/s//sky/) 替换每一行的第一个 vivian 为sky

  :%s/vivian/sky/g(等同于:g/vivian/s//sky/g) 替换每一行中所有 vivian 为sky

  可以使用 # 作为分隔符,此时中间出现的 /不会作为分隔符

  :s#vivian/#sky/#替换当前行第一个 vivian/ 为 sky/

  :%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ):/oradata/apras/替换成/user01/apras1/

  *************************************

  1.:s/vivian/sky/替换当前行第一个 vivian 为 sky

  :s/vivian/sky/g替换当前行所有 vivian 为 sky

  2. :n,$s/vivian/sky/替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

  :n,$s/vivian/sky/g 替换第n 行开始到最后一行中每一行所有 vivian 为 sky

  (n 为数字,若 n 为.,表示从当前行开始到最后一行)

  3. :%s/vivian/sky/(等同于:g/vivian/s//sky/) 替换每一行的第一个 vivian 为sky

  :%s/vivian/sky/g(等同于:g/vivian/s//sky/g) 替换每一行中所有 vivian 为sky

  4. 可以使用 #作为分隔符,此时中间出现的 / 不会作为分隔符

  :s#vivian/#sky/#替换当前行第一个 vivian/ 为 sky/

  5.删除文本中的^M

  问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M.请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。

  · 使用命令:cat filename1 |tr -d “^V^M” > newfile;

  · 使用命令:sed -e“s/^V^M//” filename >outputfilename。需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。

  ·在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:%s/^V^M//。

  ·:%s/^M$//g

  如果上述方法无用,则正确的解决办法是:

  · tr -d "\r" < src>dest

  · tr -d "\015"dest

  · stringsA>B

  6.其它

  利用 :s命令可以实现字符串的替换。具体的用法包括:

  :s/str1/str2/ 用字符串str2 替换行中首次出现的字符串 str1

  :s/str1/str2/g 用字符串str2 替换行中所有出现的字符串 str1

  :.,$ s/str1/str2/g用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

  :1,$ s/str1/str2/g用字符串 str2 替换正文中所有出现的字符串 str1

  :g/str1/s//str2/g功能同上

  从上述替换命令可以看到:g放在命令末尾,表示对搜索字符串的每次出现进行替换;不加g,表示只对搜索

  字符串的首次出现进行替换;g放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

可视模式让你可以选择文件的一部分内容,以便作比如删除,复制等工作。

进入可视模式

v

用v命令进入可视模式。当光标移动时,就能看到有一些文本被高亮显示了,它们就是被选中的内容。

三种可视模式

v

一个字符一个字符地选。从按下v的那个字符起,一直到光标所移动到的位置之间的内容都被选中。

V

一行一行地选。从按下V的那行起,一直到光标所移动到的行之间的所有行都被选中。

Ctrl-v(可以用来删除一列和多列)

它选中屏幕上的一个矩形区域。以按下Ctrl-v的位置为一个角,光标所在位置为它的对角。

离开可视模式

按下就会离开可视模式。

可视模式下的编辑

在可视模式下删除文本

d

删除所选中的部分。

D

删除所选中部分所在的行。即使没有把一行都选中,也把一行都删除。

复制

v

复制选中的部分。

D

复制所选中部分所在行。即使没有把一行都选中,也把一行都复制。

更改模式

可以随时在可视模式中的三种之间切换,只需按进入想要切换到的模式的命令即可。

更改文本

c

删除所选中的部分并切换到输入模式。

C

删除所选中的部分所在的行并切换到输入模式。

合并行

当选中想合并在一起的行以后,按下

J(大写)

就可以了。

程序员的命令

>

所选中的部分都缩进一个tab。

在所选中的部分删除一个tab的缩进。

=

自动排列所选中的内容。

查看man

K

命令查看关键字的man page,在可视模式它会以选中的文本为关键字。

可视块模式

通过Ctrl-v进入的模式为可视块模式,它会选中一个矩形区域。

插入内容

I字符串

会在每一行所选中内容的开始前添加”字符串”

改变文本

c字符串

会把选中的内空删除并进入输入模式。你只需要在选中的第一行输入一个字符串,当按下后所有行的选中部分都会和第一行一样。这里的字符串中不能包含换行符,如果包含了换行符的话,它就不会这么神奇,就会根普通模式下的c一样了。

C(大写)

会直接删除到行尾,其它与c一样。

A(大写)

会在选中的块后面添加文本。它们是对齐的。

如果要在选中的块紧接每行末尾添加内容,则需用$来指定选择到行尾,而不是简单地用光标。

替换内容

r

用来把选中的内容替换成同一个字符。

缩进

>

>将选中的块缩进一个shiftwidth

留言

Vim简明教程5:窗口

打开一个新窗口

最简单的打开新窗口的方法是

:split

它把一个窗口分成两个,光标留在上面的那个窗口中。

通过

Ctrl-w+方向键

来在窗口间切换

比如

Ctrl-ww 或 Ctrl-w Ctrl-w

切换到下一个窗口;

Ctrl-wj 和 Ctrl-wk

分别切换到下一个窗口和上一个窗口。

要关闭窗口,用

:q 或 ZZ 或 Ctrl-wc

找开一个新窗口并在其中打开一个文件

:split 文件名

也可以给split命令分配一个初始命令,也就是说执行完split接着要做的

:split +命令 文件名

比如

:split +/printf three.c

命令会把当前窗口分成两个然后在上面的窗口中查找printf这个字符串。

控制窗口大小

如果给split命令指定一个参数,则表示新找开窗口的高度

比如

:3split alpha.c

打开一个高度为3的窗口并在其中打开alpha.c

:new命令

:new

命令用起来就跟split差不多,只有一点不同:new命令会在新窗口中新建一个文件,而split只是在新窗口中打开原窗口中的内容。

分割并查看(Split and View)

:sview

命令新建一个窗口并且其中的内容是只读的。

改变窗口大小

行数Ctrl-w+

把当前窗口高度增加”行数”行(如不指定行数,默认为1)

行数Ctrl-w-

把当前窗口高度减少”行数”行(如不指定行数,默认为1)

Ctrl-w=

让所有窗口一样高

行数Ctrl-w_

把当前窗口的高度设为”行数“,如不指定则把它最大化。

缓冲

Vim用缓冲来代表一个文件。当你在编缉一个文件时,只是在编缉它的缓冲。当你完成编辑保存时,Vim把缓冲中的内容保存进文件。当然,事情并不是  这么简单。在Vim中设置的标记之类的也保存在缓冲中。你可以同时拥有多个缓冲,当你编辑多个文件时就是这样。当你想要一个Vim窗口,并且想编辑多个文 件时,把这个窗口最大化是不管用的,因为这不是一个窗口,其它的窗口还是能看得见的。此时你可以把不编辑的缓冲隐藏(hide),用命令

:hide

一个缓冲有三种可能的状态:

活动:显示在屏幕上的窗口

隐藏:没有显示在屏幕上的在编辑的缓冲

不活动:缓冲没有在编辑,但是保存着它的信息

第三种状态需要多解释一下,当你编辑另一个文件时,当前文件的内容就没有用了。Vim就关掉它。但是它的一些其它信息可能还有用。(这一部分比较混乱,原文说得也不是很清楚,不懂也无所谓)

要查看缓冲的列表,用

:buffers

命令。输出的第一列是缓冲编号,第二列是状态,第三列是与缓冲对应的文件。

状态共且以下几种:

- 不活动的缓冲
h 隐藏的缓冲
% 当前缓冲
# 其它缓冲
+ 文件被编辑而未保存

选择一个缓冲

:buffer 缓冲编号

如果你不知道缓冲的编号,可以用

:buffer 文件名

下面的命令分割窗品并编辑指定的缓冲

:sbuffer 缓冲编号

:sbuffer 文件名

还有很多关于缓冲的命令:

:bnext      去下一个缓冲
:count bnext     执行count次去下一个缓冲
:count sbnext     先分割窗口,然后执行:count bnext
:count bprevious    去上一个缓冲。如果指定了count,则执行count次
:count sbprevious   先分割窗口,然后执行:count bprevious
:count bNext     同:count bprevious
:count sbNext     同:count sbprevious
:blast      去最后一个缓冲
:sblast      先分割窗口再执行:blast
:brewind     去第一个窗口
:sbrewind     先分割窗口再执行:brewind
:bmodified count    去第count个编辑过的缓冲
:sbmodified count   等于:split加:bmodified

缓冲选项

通常当所有编辑一个文件的窗口都关掉后,这个窗口的缓冲就变成”不活动”,如果不想这样,可以设置

:set hidden

让它变成隐藏而不是不活动。

通常分割/缓冲相关的命令会分割当前窗口,但是也可以让Vim在已经有窗口打开所指定的缓冲时,切换到那个窗口而不是新建一个:

:set switchbuf=useopen

更多关于switchbuf的内容参见23章。

留言

Vim简明教程4:块和多文件编辑

这是我在看一本叫做Vim Tutorial的书时作的笔记,去掉了例子,作了一下总结。放上来作为一个Vim的小教程分享一下。本系列文章可转载,但请注明出处:http://mingfal.bloggerspaces.com

剪切,粘贴和复制

当你在删除文字的时候,比如d, x之类的,被删除的内容都被保存了下来。你可以通过

p

来粘贴它们。

交换字符
有时你会把两个字母打反,比如把the打成teh。用

xp

命令就可以把它们调换位置。原理是这样的,首先x会把e删除并保存,p会把它粘贴到光标所在位置,也就是h之后。

关于粘贴的更多
p命令可以用多次。p命令把内容粘贴在光标之后,而

P

把内容粘贴在光标之前。

标记

Vim允许你在文本中做标记。命令

ma

会在光标所在处做一个名为a的标记。你最多可以在文本中做26个标记(a-z)。

要移动到一个标记,用命令

`标记

其中`是在键盘左上角数字一左边的那个键

要移动到一个标记所在行的行首,用命令

‘标记

其中‘是单引号

标记在删除大量文件内容人时很有用。比如

在你想要删除的文本的开始处做标记ma

然后移动到想删除文本的末尾,用d`a删除从此位置到标记a间的内容。

注意,标记会跟着它所标记处的文本移动(比如在它之前插入或删除了东西)

标记都在哪呢?

:marks

命令会列出所有标记的列表。

复制

y

命令用来复制,它的用法与d很相似。

复制一行

Y(大写)

复制一行内容

管道

!动作 命令

会把由”动作”选中的文本作为”命令”的输入,并用”命令”的输出替换选中的文本。

举个例子,sort命令会对一个文件的内容排序。如果想对当前正在编辑文件的前10行排序,可以这样:

先把光标移动到第一行,然后

!10G sort

!!命令

命令把当前行作为“命令”的输入。(这是一个把系统命令的输出放到文件里的好方法)。

编辑另一个文件

:vi 或 :e

可以关闭当前文件,并打开新的文件。

如果当前文件没有保存,则会出现提示。这时使用

:w

会保存未保存的文件。

View命令

:view 文件

会在Vim中以只读方式打开文件。

处理多个文件

可以在调用Vim时指定多个参数以依次编辑多个文件

Vim 文件1 文件2 文件3 …

默认情况下Vim每次只会编辑一个文件,当编辑完一个文件时,

:next

命令会关闭光前文件打开下个文件开始编辑。

我在哪里
当你在编辑多个文件时有时会忘了自己在编辑哪个。

:args

命令会显示当前正在编辑哪个文件。

编辑上一个文件

当要编辑上一个文件时,用命令

:previous 或 :Next。

编辑每一个或最后一个文件

要编辑第一个文件,用

:rewind

要编辑最后一个文件,用

:last

编辑两个文件

当同时编辑两个文件时,正在编辑的是当前文件,没在编辑的会被当成“另一个文件”,在这两个文件间切换要方便的多。用命令:

Ctrl+^

留言

Vim简明教程3:查找

这是我在看一本叫做Vim Tutorial的书时作的笔记,去掉了例子,作了一下总结。放上来作为一个Vim的小教程分享一下。本系列文章可转载,但请注明出处:http://mingfal.bloggerspaces.com

简单查找

/要查找内容

用/向后查找,紧随其后的要查找的内容。然后按下回车,Vim就会去为你找你想要的东西了。

要注意

.*%/\?!$ 还有空格

都有特殊意义,如果要查找的内容中包含这些字符,要在前面加上一个\。

要查找区配的下一处,用命令

\ 或 n

它们的作用是相同的。

查找历史

查找命令可以允许你来查看查找的历史,在输入一个/以后,不要按回车,然后再按上下键就可以查看上一条或下一条查工历史了。在某个历史处如果按回车,就会查找此内容。

查找选项

高亮

:set hlsearch

命令可以让所有的查找都高亮显示匹配的部分。

:set nohlsearch

取消高亮选项

增量查找

一般情况下,Vim在查找时要等待用户输入整个要查找的内容,然后再去查找。增量查找则是不等用户输入完毕,就查找已输入的部分。要使用它需要进行下面设置:

:set incsearch

如查取消,则

:set noincsearch

反向查找

?要查找的内容

命令从当前位置开始反向查找,即向文件的开始查找。

改变方向

N

命令可以改变查找的方向并查找改变方向后的下一处匹配。

基本的正则表达式

行首(^)和行尾($)

^表示一行的开始,include会匹配每一处的include,而^include只会匹配在行首的include。
$表示一行的结束,was$只会匹配在行末的was。
如果想要匹配只有一个词the的行,用^the$。

匹配任意单个字符(.)

.匹配任一个字符,比如c.m表示以c开头以m结尾的有三个字母的字符串。

匹配特殊字符

好多字符在正则表达式中有特殊含意。要匹配这一类字符,要在前面加一个\。比如,要匹配the.,就要用the\.

留言

Vim简明教程2:编辑得更快一些

这是我在看一本叫做Vim Tutorial的书时作的笔记,去掉了例子,作了一下总结。放上来作为一个Vim的小教程分享一下。本系列文章可转载,但请注明出处:http://mingfal.bloggerspaces.com

按词移动

w

按下w会前进一个词。

b

按下b会后退一个词。

这里,就像在Vim中的大部分情况下一样,在这两个命令前面加上一个数字可以让它们重复做多次。

移动到行首或行末

$

$会让你移动到所在行的末尾。

^

^会让你移动到所在行的开始。也可以做相似的事。不过^会移动到第一个非空的字符处,而会移动到行首。

这两个命令也接受数字参数,比如

2$

会移动到下一行末。

在行上查找

f要查找的字符

f用来在一行上查找一个字符并移动到该字符所在处。比如

fx

用来移动到此行当标后第一个x处。如果有一个数字参数,就可以指定移动到某个指定的匹配位置。

F

F用来向左查找。

移动到指定行

行号G

G命令会把你带到用行号指定的行。如果使用没有行号的G,将会移动到最后一行。

显示当前所在位置

:set number

Vim的可制定性是很强的,所以你可以通过:set设定很多选项。number就是其中之一。它是一个布尔选项,用来控制是否在最左边显示行号。

:set number

可以把它打开。

:set nonumber

则可以关闭此选项。

Ctrl+g

Ctrl+g会显示当然后在的位置。

向上和向下翻屏

Ctrl+u

会向上翻半屏

Ctrl+d

会向下翻半屏

删除文本

dw

dw会删除一个词。你应该可以看得出来,这里的w代表的就是word(词).其实d后面可以加好多东西来控制删除的对象。比如:

d$

会删除从当前位置到行末的所有内容。

数字放在哪

这里有一个疑问,如果想删除三个词,那么应该怎么办?是d3w,还是3dw。其实它们都能做到,不过原理不太一样。d3w是一次删除三个词,而3dw是执行三次删除一个词。其实这两者可以混起来,比如2d3w。

改变文本

c

c用来改变文本。它的用法跟d一样。

cc

用来删除一行并进入输入状态。

cw

用来删除一个词并进入输入状态等。

但是cw跟dw有一个不同之处。dw删除了一个词以后,还删除该词后面的空格。而cw只是会删除这个单词,空格仍然保留。

.

.命令会重复上一次所做的删除(d, x)或改变(c)命令。

合并行

J

J(大写)将当下一行接在当前行后,并在两者间插入一个空格来合并这两行。

替换字符

r替换的字符

r命令把当标处的字符替换成在r命令中指定的字符。

更改大小写

~

通过~可以把光标处的字符用它的大写(如果现在是小写)或小写(如果现在是大写)替换。

Vim有着简洁而强大的宏功能。

q宏名

按下 q+宏名 后会进入宏录制状态,也就是说,此后发生的一切操作都会记录到名为“宏名”的宏中。如果名为“宏名”的宏已经存在,则将它覆盖。

@宏名

会调用名为“宏名”的宏。

特殊字符

当要输入特殊字符时,可以用

Ctrl+k特殊字符代号

可以通过命令

:digraph

来得到一个完整的对应表,来查看特殊符号所对应的代号。

比如,要输入á, 则要通过下面的方法

Ctrl+ka’

留言

Vim简明教程1:基本编辑

这是我在看一本叫做Vim Tutorial的书时作的笔记,去掉了例子,作了一下总结。放上来作为一个Vim的小教程分享一下。本系列文章可转载,但请注明出处:http://mingfal.bloggerspaces.com

开始之前要做的

touch ~/.Vimrc

这会创建空的~/.Vimrc文件,这会告诉Vim你想要让Vim以Vim方式工作。如果不这样做的话,Vim会以Vi兼空模式运行,会有好多有用的功能没法使用。这也可以在Vim运行过程中通过

:set nocompatible

来实现。

第一运行Vim

gVim file.txt

会运行gvim(Vim的图行化前端),并在其中打开file.txt文件

Vim命令

Vim

会让你在终端打开Vim编辑,而不是像刚才那样打开一个新的窗口。

模式

Vim是一个模式化的编辑器。也就是说,它在不同的模式下会有不同的表现。当最下面的一行是文件名或为空时表示正在普通模式。如果是–INSERT–表示是在编辑模式。而–VISUAL–则表示目前是可视化模式。

插入文本

i

键入i后会从普通模式转变到编辑模式。此时输入的东西将会作为文件的一部分。

当你编辑完毕后,按下就会从编辑模式转回普通模式。同时,不管现在是在什么模式下,都会把你带回普通模式。

移动光标

当你回到命令模式(即普通模式)时,可以用下面的键来移动光标

h(左), j(下), k(上), l(右)

这可能看上去比较奇怪,谁会用l去表示右???但是实际上这是有原因的。移动光标上是在编辑过程中经常要做的,而h , j, k, l就在放右手手指的地方,也就是说按这几个键是最快的。当然,也可以用方向键来移动光标,不过那会大大减低你的编辑速度。

删除字符

x

当你想删除一个字符时,把光标移动到它上面,然后按下x键,它就会消失。

撤消和重做

u

在普通模式下按下u会撤消上一布的操作。

Ctrl+R

如果撤消的次数过多,按下 Ctrl+R 会重做上次撤消的操作。

U

U(大字)是一个特殊的撤消键,它会撤消在在最后编辑的行上所作的所有操作。

退出

ZZ

ZZ会退出Vim并对所编辑的文件保存。

取消修改

:q!

当你编辑完一个文件发现你并不想这样编辑它时,:q! 会让你退出Vim而不保存所作的修改。

追加

a

i会在光标所在安符前插入字符,而a会让你在当标所在的位置之后继续输入内容。

删除一行

dd

dd命令会删除当前所在的一行内容。

新开始一行内容

o

o命令会在光标所在行下面加入一行,并将光标移动的此行的开始以供输入。

O

如果想在光标所在行的上面加入一行,请使用命令O(大写)

获得帮助

:help

:help命令让你可以进入和查看Vim的帮助。用ZZ退出帮助。同时可以用像在Vim一样的h, j, k, l键来移动光标。帮助中会有一些被竖线括起来的词,那其实是超级链接。用Ctrl+]就可以跟随它,Ctrl+t用来后退。如果要查找某一特定主题的帮助,使用

:help 主题

同时

也会起到和:help一样的效果。

重复命令

当要做多次同样的操作时,可以用计数来加快这一过程。

9k

会让你向上移动9行。通过在命令前加一个数字n,就可以执行这一命令n次。

Vim教程

Vim自带了一份Vim教程

:vimtutor

会打开它。

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1040505次
    • 积分:18213
    • 等级:
    • 排名:第522名
    • 原创:741篇
    • 转载:522篇
    • 译文:0篇
    • 评论:106条
    最新评论