Vim的各种操作指令

----------------------------------------------------------------------------------------------------------------------------------------------------------

SpaceVim

windows下安装gvim的spacevim,spacevim是一个集合的IDE神器。可以更方便配置vim,更像IDE。

可以参考:https://github.com/Gabirel/Hack-SpaceVim

基本步骤如下:

1.在c:\user\(username)的目录下,mkdir  .cache, 然后  git clone https://github.com/SpaceVim/SpaceVim.git vimfiles

2.随后打开gvim,会自动显示安装过程,一定要保证上面的git路径,要不然不会出现的

3,完成后再次打开gvim会自动显示安装插件,若由于网速原因没有安装成功,  可以将上面创建的 .cache文件夹下面的内容删除,重新来一边或者 使用 :SPUpdate 这一命令将会更新所有插件

也可以设置离线下载,离线下载需要的内容是  需要打包的位置是:~/.cache/vimfiles

这个是其他电脑上安装过的产生的文件夹,进行打包,然后放到你需要的电脑上。

其他的一下问题可以参考上面的文章链接

GUN Global windows是下载后,将bin路径添加到environment path中

我鼓捣了半天,gtags生成GPATH的时候总是会报错,就不管了, 直接用cscope代替了,也一样可以搜索代码。

命令行下粘贴复制的内容: ctrl+r, 然后按相应的剪切板如1,2 ,", 或者*代表系统剪切板, 可以粘贴内容到命令行内。

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

在linux 中执行shell脚本,有时候会出现如下错误:

/bin/bash^M: bad interpreter: No such file or directory

这是由于文件换行符格式是dos格式的,bash无法解析。

在vi修改文件换行符格式为UNIX格式

:set ff=unix

 

正规的正则表达式如下

^(?!.*hello)  :匹配不包含hello字符串

^((?!33333).)*$

但是在vim中,匹配不包含某个字符串的形式:

 ^\(.*keyword\)\@!.*$  ,keyword为不包含的字符

^\(.*include\)\@!.*

 

VIM 正则参考: https://www.jianshu.com/p/3abd6fbc3322

 

关于buffer的几个常用的操作指令。现在用MiniBufExpl插件,用起来比较方便。

  • :e 打开文件
  • :ls    当前打开的buf
  • :bn    下一个buf
  • :bp    前一个buf
  • :b    n是数字,第n个buf
  • :b    自动补齐
  • :bd    删除buf
  • bd!  number 强制删除buf
  • 用 :f 可以看文件名,
    用 :!pwd  可以看当前的详细路径

Vim正则表达式:

简单替换表达式

:[range]s/from/to/[flags]

range:搜索范围,如果没有指定范围,则作用于但前行。

  • :1,10s/from/to/ 表示在第1到第10行(包含第1,第10行)之间搜索替换;
  • :10s/from/to/ 表示只在第10行搜索替换;
  • :%s/from/to/ 表示在所有行中搜索替换;
  • 1,$s/from/to/ 同上。

flags 有如下四个选项:

  • c confirm,每次替换前询问;
  • e error, 不显示错误;
  • g globle,不询问,整行替换。如果不加g选项,则只替换每行的第一个匹配到的字符串;
  • i ignore,忽略大小写。

这些选项可以合并使用,如cgi表示不区分大小写,整行替换,替换前询问。

正则表达式

1、元字符

元字符

 

元字符 说明
. 匹配任意字符
[abc] 匹配方括号中的任意一个字符,可用-表示字符范围。如[a-z0-9]匹配小写字母和数字
[^abc] 匹配除方括号中字符之外的任意字符
\d 匹配阿拉伯数字,等同于[0-9]
\D 匹配阿拉伯数字之外的任意字符,等同于[^0-9]
\x 匹配十六进制数字,等同于[0-9A-Fa-f]
\X 匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]
\l 匹配[a-z]
\L 匹配[^a-z]
\u 匹配[A-Z]
\U 匹配[^A-Z]
\w 匹配单词字母,等同于[0-9A-Za-z_]
\W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]
\t 匹配字符
\s 匹配空白字符,等同于[\t]
\S 匹配非空白字符,等同于[^\t]

 

一些普通字符需转意

 

元字符 说明
\* 匹配* 字符
. 匹配. 字符
\/ 匹配 / 字符
\ 匹配 \ 字符
\[ 匹配 [ 字符
\] 匹配 ] 字符

 

表示数量的元字符

 

元字符 说明
* 匹配0-任意个
\+ 匹配1-任意个
\? 匹配0-1个
\{n,m} 匹配n-m个
\{n} 匹配n个
\{n,} 匹配n-任意个
\{,m} 匹配0-m个

 

表示位置的元字符

 

元字符 说明
$ 匹配行尾
^ 匹配行首
\< 匹配单词词首
\> 匹配单词词尾

 

2、替换变量

在正则式中以\(和\)括起来的正则表达式,在后面使用的时候可以用\1、\2等变量来访问\(和\)中的内容

看下面最后一个例子

例子

  • 删除行尾空格::%s/\s+$//g
  • 删除行首多余空格:%s/^\s*// 或者 %s/^ *//
  • 删除沒有內容的空行:%s/^$// 或者 g/^$/d
  • 删除包含有空格组成的空行:%s/^\s*$// 或者 g/^\s*$/d
  • 删除以空格或TAB开头到结尾的空行:%s/^[ |\t]*$// 或者 g/^[ |\t]*$/d
  • 把文中的所有字符串“abc……xyz”替换为“xyz……abc”可以有下列写法
  • :%s/abc\(.*\)xyz/xyz\1abc/g

    :%s/\(abc\)\(.*\)\(xyz\)/\3\2\1/g

 可以限定/ 查找数据的范围,如下: 输入 :help / 可以查看查找的help

 You can limit the search command "/" to a certain range of lines by including
\%>l items.  For example, to match the word "limit" below line 199 and above
line 300: >
    /\%>199l\%<300llimit
Also see |/\%>l|

 在vim模式下对文本 进行对齐操作

从其他地方复制了一个格式很乱的代码到 vi 文本中,想让代码左对齐怎么办?直接在“命令行模式”下使用:

:{range}left [margin]

解释:

{range}指需要对那些行进行操作;

[margin]指最终该行首字符据屏幕左边缘的距离,若不指定,则默认紧靠屏幕左边缘。

例如:

:1,3 left 5

 

关于ctags的使用

可以参考文章

https://blog.csdn.net/gangyanliang/article/details/6889860

ctags有更多的使用方法来满足不同的使用情况,例如源文件不在同一目录下,或者能不能从一个文件list中加入文件?

需要查看一下。 

 -L c:\a\list.txt  可以从指定的list文件加载需要的文件

 

超详细的cscope和其他的一些插件

https://blog.csdn.net/Listening_music/article/details/7428940

  首先进入源码目录, 在linux终端中输入以下命令以创建cscope数据库:

        $ find ~/work/..Project/ -name "*.h" -o -name "*.cpp" > cscope.files

        $ cscope -bkq -i cscope.files

     如果是在windows环境中, 则换成如下命令:

        dir /s /b *.cpp *.h > cscope.files

         cscope -b -q -k -i cscope.files

 

TagHighlight的用法:
    :UpdateTypesFileOnly             *:UpdateTypesFileOnly*

        This command operates in the same manner as |UpdateTypesFile|, but
        it uses the current tags file rather than generating a new one
        (useful if you're generating tags files as part of your build
        process

 

find中的分别找寻文件:

find ./ -name '*.c' -or -name '*.h' -or -name '*.S' -or -name ' *.cpp'

自动补全代码的 YouCompleteMe,可以尝试安装一下。

 

试用一下OmniCppComplete,是通过 ctags中的tag进行查找并补全代码的

 

NERDTree的各种操作指令

命令中输入 :let NERDTreeIgnore=['\.txt$','\.py$']   可以过滤.txt 和.py文件。 在nerdtree中 按  f 来打开或关闭过滤

?: 快速帮助文档
o: 打开一个目录或者打开文件,创建的是buffer,也可以用来打开书签
go: 打开一个文件,但是光标仍然留在NERDTree,创建的是buffer
t: 打开一个文件,创建的是Tab,对书签同样生效
T: 打开一个文件,但是光标仍然留在NERDTree,创建的是Tab,对书签同样生效
i: 水平分割创建文件的窗口,创建的是buffer
gi: 水平分割创建文件的窗口,但是光标仍然留在NERDTree
s: 垂直分割创建文件的窗口,创建的是buffer
gs: 和gi,go类似
x: 收起当前打开的目录
X: 收起所有打开的目录
e: 以文件管理的方式打开选中的目录
D: 删除书签
P: 大写,跳转到当前根路径
p: 小写,跳转到光标所在的上一级路径
K: 跳转到第一个子路径
J: 跳转到最后一个子路径
: 在同级目录和文件间移动,忽略子目录和子文件
C: 将根路径设置为光标所在的目录
u: 设置上级目录为根路径
U: 设置上级目录为跟路径,但是维持原来目录打开的状态
r: 刷新光标所在的目录
R: 刷新当前根路径
I: 显示或者不显示隐藏文件
f: 打开和关闭文件过滤器
q: 关闭NERDTree
A: 全屏显示NERDTree,或者关闭全屏

你可能感兴趣的:(Linux)