vim使用技巧

1、shell脚本自动加注释

vim /etc/vimrc

autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"

func SetTitle()

    if expand("%:e") == 'sh'  
        call setline(1, "#!/bin/bash")
        call setline(2, "##############################################################")  
        call setline(3, "# File Name: ".expand("%"))
        call setline(4, "# Version: V1.0")
        call setline(5, "# Author: oldboy")
        call setline(6, "# Organization: www.oldboyedu.com")
        call setline(7, "##############################################################")
    endif  
endfunc 

autocmd BufNewFile *.sh,*.script exec ":call XYY()"
" ****************************************************************** ")
 function XYY()
          call append(0,"#!/bin/bash                      ")
          call append(1,"#******************************************")
          call append(2,"#Author:          zhangjingzhi      ")
          call append(3,"#Create_Time:     ".strftime("%Y-%m-%d" ))
          call append(4,"#Version:         v1.o                 ")
          call append(5,"#Mail:            1570649754@qq.com    ")
          call append(6,"#Description:     doyouwanttodo         ")
          call append(7,"#******************************************")
 endfunction

2、vim加密文本

法一

# vim -x  aa.sh

法二

编辑完后,按Esc

:set key=密码

 3、文本对比diff的使用

 (1)正常格式

# diff a.txt b.txt  

2,3c2,3
< this is line 2 
< hello world!  
---
> this is line 2
> HELLO  world!  

第一行:2,3c2,3

第一个2,3表示文件a.,txt中第2到3行有变化,后面的2,3表示a.txt通过变化成为b.txt中的第2到3行。中间的c就是具体的变化了,c表示改变(change),其它类型还有d删除(delete),a增加(addition)。注意,人眼看不到的空格号也能识别到。

(2)上下文格式

由于在正常格式下,提示信息比较少,我们无法快速定位所修改的地方,经常需要打开文件才知道修改细节。所以,为了给出更多的信息,引入了上下文格式。它的使用命令如下:

# diff -c  a.txt b.txt  (c表示context,即上下文的意思。)
*** a.txt	2020-10-01 22:08:24.605163484 +0800  
--- b.txt	2020-10-01 22:08:18.516164179 +0800
***************
*** 1,4 ****
  this is line 1 
! this is line 2 
! hello world!  
  this is line 4 
--- 1,4 ----
  this is line 1 
! this is line 2
! HELLO  world!  
  this is line 4 

第1行和第2行表示修改前及修改后的文件及更新时间

(!)表示该行有改动,如果该行被删除,则为减号(-),如果该行被增加,则为加号(+)。后面几行的含义类似。

(3)合并格式

这种格式是正常格式与上下文格式的综合版,同时这种格式也是git diff所采用的格式。使用这种格式的命令是:

# diff -u  a.txt b.txt 
--- a.txt	2020-10-01 22:08:24.605163484 +0800
+++ b.txt	2020-10-01 22:08:18.516164179 +0800
@@ -1,4 +1,4 @@
 this is line 1 
-this is line 2 
-hello world!  
+this is line 2
+HELLO  world!  
 this is line 4 

(4)并排格式,更直观

# diff  a.txt b.txt -y -W 50
this is line 1 		this is line 1 
this is line 2 	      |	this is line 2
hello world!  	      |	HELLO  world!  
this is line 4 		this is line 4 

“|”符号,表示这行有更改。另外,如果前面是“<”,表示后面文件比前面文件少了1行内容;如果是">",表示后面文件比前面文件多了1行内容。

4、解决粘贴代码乱的问题

 :set paste  + i

5、vim编辑器中快捷键

do:删至行首

d$:删至行尾

dG:全删

6、跳到指定的行

:  12  (回车跳到12行处)

7、 指定行数范围删除

:  num1,num2  d

8、在每行行首或行尾插入指定字符串

行首 : % s/^/your_word/

行尾 : % s/$/your_word/

在2~50行首添加//号注释

:2,50 s/^/\/\//g 

9、跳转到指定行

在vim中有3中方法可以跳转到指定行(首先按esc进入命令行模式):

1、ngg/nG (跳转到文件第n行,无需回车)

2、:n (跳转到文件第n行,需要回车)

3、vim +n filename (在打开文件后,跳转到文件的第n行)

10、光标移到行首、行尾

行首:0或者^
行尾:$

11、复制、删除

复制
「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:复制#个字到缓冲区
「yy」:复制光标所在行到缓冲区。
「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。➕d删除,+p复制

12、Vim中出现^M和行尾空格

原因:在Windows/Dos系统下编辑文字,win/Dos系统会在每一行后面插入一个换行符,即"^M",十六进制:0x0D0A,与Linux下的换行符十六进制是不一样的,Linux/Unix下是0A(ASCII码),具体也取决于编译器。

  • 解决方案(全局替换):
    • 方法一:命令行模式下:% s/ctrl+v,然后再ctrl+m//g
    • 方法二: 命令行模式下:% s/\r//g
    • 方法三:
    • cat file | tr -s "\r" "\n" > new_file
      或
      cat file | tr -d "\r" > new_file
      
  • 局部替换:
    • 命令行模式:n1, n2 s/ctrl+v ctrl+m//g (其中的n1和n2是行号)

删除行尾的空格:

:% s/\s\+$//g
删除空行和注释行,并做备份  
sed -ri.bak '/^[ \t]*#|^[ \t]*$/d' /etc/ntp.conf
egrep -v "*#|^$" /etc/nginx/conf.d/default.conf 
正则表达式在"\s+" 在Java中使用"\s+",因为反斜杠是转义字符
\s表示匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]
而"\s+"则表示匹配任意多个上面的字符
    \f -> 匹配一个换页
    \n -> 匹配一个换行符
    \r -> 匹配一个回车符
    \t -> 匹配一个制表符
    \v -> 匹配一个垂直制表符
 在命令行模式下:

% 当前完整的文件名
%:h 文件名的头部,即文件目录.例如../path/test.c就会为../path
%:t 文件名的尾部.例如../path/test.c就会为test.c
%:r 无扩展名的文件名.例如../path/test就会成为test
%:e 扩展名

14、mac的esc 键突然不显示了,设置快捷键

vim中:
:inoremap jk <esc> 
或者/etc/vimrc追加inoremap jk <esc>
注:jk是随意指定的组合键

15、命令补全

使用Ctrl-N或Ctrl-P键,将按照'complete'选项指定的范围来搜索匹配的关键字。

也可以ctrl+X在插入模式下,按tab进行补全

:set complete=.,w,b,u,t,i

16、vim配置开发环境

https://vim-bootstrap.com/

17、vim中删除空行和注释

删除空行

:g/^$/d

删除空行以及只有空格的行

:g/^\s*$/d

删除以 # 开头或 空格# 或 tab#开头的行

:g/^\s*#/d

对于 php.ini 配置文件,注释为 ; 开头

:g/^\s*;/d

使用正则表达式删除行

如果当前行包含 bbs ,则删除当前行

:/bbs/d

删除从第二行到包含 bbs 的区间行

:2,/bbs/d

删除从包含 bbs 的行到最后一行区间的行

:/bbs/,$d

删除所有包含 bbs 的行

:g/bbs/d

删除匹配 bbs 且前面只有一个字符的行

:g/.bbs/d

删除匹配 bbs 且以它开头的行

:g/^bbs/d

删除匹配 bbs 且以它结尾的行

:g/bbs$/d

.ini 的注释是以 ; 开始的,如果注释不在行开头,那么删除 ; 及以后的字符

:%s/^\;.\+//g

删除 # 之后所有字符

%s/\#.*//g

18、将文本中相同数字进行自增

docker save -o 1.tar docker.io/openshiftistio/origin-ansible:0.7.1 ;\
docker save -o 1.tar docker.io/openshiftistio/origin-ansible:0.8.0 ;\
docker save -o 1.tar docker.io/skydive/skydive:latest \

##执行
:g/1.tar/ s//\=line('.').'.tar'/

##效果
docker save -o 1.tar docker.io/openshiftistio/origin-ansible:0.7.1 ;\
docker save -o 2.tar docker.io/openshiftistio/origin-ansible:0.8.0 ;\
docker save -o 3.tar docker.io/skydive/skydive:latest ;\

19、显示匹配个数

:%s/docker//gn

20、去除重复的行

:sort u

21、忘记sudo后,在vim中保存一个只有root可以写的文件

:w !sudo tee %

命令解释

:w是vim的写入命令

%当前编辑的文件名

!sudo tee   vim中调用shell命令都是以!开头的

整个命令就是:以root的身份运行tee命令,读取vim :w命令的输出作为标准输入,将其内容输出到标准输出设备,同时保存到%表示的文件中

 

 
http://www.360doc.com/content/18/0622/08/51888465_764315934.shtml 内容全
https://blog.csdn.net/wangran51/article/details/9088005 
posted @ 2019-08-13 13:11  凡人半睁眼  阅读(417)  评论(0编辑  收藏  举报