vim8.1 使用过程中的指令总结

版权声明:转载请标明出处,谢谢! https://blog.csdn.net/SimileciWH/article/details/83790409

                                                                 持续更新......


1    在normal模式下(举个例子)

:!ls    #列举出当前目录下的所有文件,并回到命令窗口,使用任意键返回vim
:ls      #列举出当前的buffer中有哪些文件的buffer
>> 1 %a "a.txt"
   2 #h "b.txt"

                                                                              图1   

其中%代表显示的是当前窗口可见的文件,#代表的是其他可供选择的的文件buffer

2    在多个打开的buffer中切换

使用<ctrl+shift+^>,或者<ctrl+6>,或cmd模式    :bnext(:bn)或者   :bprev(:bp)或者   :buffer Num

其中Num可以通过   :ls查看每个文件的buffer编号,即图1中的编号1,2,3,......

3    通过vim打开的文件原理

vim open 一个文件,其实是将该文件的所有内容load到buffer中,我们在vim中看到的所有内容就是buffer的内容,如果对buffer的内容做出任何修改,只要不执行写入到硬盘的操作(即保存),源文件是不会发生任何改变的,因此,假设我们有3个文件,

  1. a.txt
  2. b.cpp
  3. c.py

使用vim打开他们

vim a.txt b.cpp c.py

这时候三个文件的的内容会全部加载到内存的buffer中,在vim的cmd模式下执行如下指令

:ls
>>
1 %a a.txt
2 #h  b.cpp
3 #h  c.py

 其中1,2,3就是三个文件对应的buffer编号,你可以通过

:b(uffer) 1
:b(uffer) 2
:b(uffer) 3

来查看每个文件,就像第2节提到的:b(uffer) Num的指令一样。

当在b.cpp文件中作出修改时再次执行ls指令

:ls
>>
1 #h a.txt
2 %a+ b.cpp
3 #h c.py

会出现一个“+”号,表示这个buffer文件被修改了,如果不执行:w(rite)操作的话,直接退出,vim会提示错误,询问你是否保存。这里有一个隐藏的buffer的概念,对b.cpp的文件做出的修改,其修改的内容是存放在一个隐藏的buffer中的通过:ls指令是无法查看到的。可以通过:w(rite)保存这个buffer到文件,或者通过;q(uit)放弃这个隐藏的buffer

3.1    当你load很多个文件的buffer到vim后,你要怎么关闭它们呢

通过:bufferdelete可以简写成:bd来删除这个load进来的buffer,当然你需要先保存你需要的修改通过:w(rite)一个个保存或者通过:wa(ll)全部保存,再删除这些buffer,这样修改会保存到文件。你也可以通过:q来一个个关闭他们,或者通过:qa(ll)一次关闭全部。

3.2    如何在打开的vim中load新的文件进来

通过:e(dit) {file_path},或者通过使用插件的方式。

如果你想edit当前目录下的其他文件,也可以

:edit %:h<tab>"文件前几个字母"<tab>
或
:edit ./"文件前几个字母"<tab>

3.3    find'命令

配合edit的常常还有:find命令,使用find命令时要注意设置path,不然可能会提示: E345:Can't find file "xx"  in path

:set path+="你要查找文件的具体文件夹"/**

其中两个**表示,包含这个文件夹下的所有子文件或者子文件夹。

3.4    Explore命令

这是文件系统中netrw的功能,分为:Sexplore和:Vexplore,主要是切换到文件的目录结构, Sexplore表示水平显示分割窗口,Vexplore表示垂直显示的分割窗口。这个功能和插件,nerdtree的功能类似。

3.5    编辑 'readonly'文件时

当保存时,

:write
E45:'readonly' option is set (add ! to override)

按照提示添加!,再次执行,
 

:write!
"xxxxxx" E212: Can't open file for writing 

这是没有权限的原因,

执行如下命令,

:write !sudo tee % > /dev/null
“会提示你输入超级用户的密码”
W12: Warning: File "xxx" has changed and the buffer and the buffer was changed in Vim as well
[O]k,(L)oad File, Load (A)ll, (I)gnore All:“让你选择其中一种操作,一般选择 load”

 输入"l"   load就可以了。

命令注解:

write ![cmd] 是vim的一种形式,会执行cmd命令在write时,tee命令是执行进程通过超级用户的权限,%代表当前的buffer,>代表output输出到,/dev/null代表null device.

4    vim切分窗口

有两个方式:split和:vsplit。前者是水平分割,后者是垂直分割

切分打开窗口的方式:通过<C-w>s将当前窗口水平分割;<C-w>v将当前窗口垂直分割。这个的指令切分的窗口的样式里面的内容是一样的,这样当某个结构提或者代码太长时,你可以通过不同窗口来查看代码的片段,而不需要上下滚动屏幕。

如果你不需要他们是相同的内容,你可以选中其中一个窗口,使用:e(dite) {file_name}load一个文件的buffer这样窗口的内容就不同了。

你可以切分很多个这样的窗口,通过<C-w>w可以在这些窗口之间切换,也可以使用:bn(ext)和:bp(revious)前后切换,或者bl(ast)和bf(irst)最后一个和第一个文件之间切换。

5    vim指令:shell的使用

当你在vim中编写代码时,突然想打开某个文件查看其中的内容。或是运行其他软件或者script时,但是你又不想关闭你当前active的vim窗口,你可以使用:shell命令,将当前的vim窗口挂起到后台,这一点常常非常有用。

:shell可以让你离开当前正在编辑的vim文件,重新回到terminal,执行你想要的一切操作,随便什么都可以,和你重新打开一个terminal一样的,但是当你要回到之前编辑的vim文件时,你只需要在terminal中输入exit就可以回到之前使用的vim窗口中,在这个期间,你甚至可以重现打开新的vim编辑文件,这之间不会互相影响,但是不要试图打开之前那个vim窗口已经打开的文件并且作修改,这个我没有测试过,可能会出现错误的提示。


                                                                            2018-11-23 updating......

6     怎么通过vim在新建一个python文件或者bash等文件时,在开头自动添加一些信息

autocmd BufNewFile *.[ch],*.hpp,*.cpp,*.mk,*.sh,*.py exec ":call SetTitle()"
func SetTitle()
    if &filetype == 'make'
        pass
    elseif &filetype == 'sh'
        pass               
    elseif &filetype == 'python'
        pass
    else
        pass
    endif
endfunc

这是一个简单的框架,通过autocmd   BufNewFile xxxxxx exec  ":call SetTitle()",就会在出现BufNewFile时(即创建新文件),检测是什么类型文件,然后自动通过exec 执行SetTitle()函数。

SetTitle()的函数内容如上所示,将你先要添加的内容添加到pass的位置。例如

autocmd BufNewFile *.[ch],*.hpp,*.cpp,*.mk,*.sh,*.py exec ":call SetTitle()"
func SetTitle()
    if &filetype == 'make'
        pass
    elseif &filetype == 'sh'
        pass               
    elseif &filetype == 'python'
        call setline(1,"#!/usr/bin/env python")
        call setline(2,"#-*- coding: utf-8 -*-")
        call setline(3,"\"\"\"")
        call setline(4,"#__Filename__ : ".expand("%:t"))
        call setline(5,"#__Auther__   : simileciwh")
        call setline(6,"#Email        : [email protected]")
        call setline(7,"#Created date : ".strftime("%F %T"))
        call setline(8,"# code is far away from bugs with the god animal protecting")
        call setline(9,"#    I love animals. I have a lovely doggy!")
        call setline(10,"\"\"\"")
    else
        pass
    endif
endfunc

你可以把所有的pass位置,替换成你先要添加的内容。

7     在第6节设置完成后,每次创建新的文件时,光标都会停留在文件第一行的开头,当时因为已经在创建文件的时候我们已经追加了新的内容,我们想让光标一打开文件就在可以编辑的新行,可以添加一行这个语句。

exe "normal G"

在每一个之后,这句话的意义是,在normal模式,执行命令G,即跳到最后一行。

猜你喜欢

转载自blog.csdn.net/SimileciWH/article/details/83790409