vim文本編輯器

vi簡介

vi:Visual Interface,是一種功能強大的文本編輯器,工作在字符模式下,它可執行輸出、輸出、查找、替換、塊等眾多文本操作,不需要圖形界面,因此執行起來效率會非常高,主要用來編輯純文本文件,常見的編碼有,ASCII,Unicode等等

文本編輯器的種類:

    行編輯器:逐行來對文本進行處理的工具,如sed

    全屏編輯器:占據整個屏幕進行編輯,如nano,vi

vim工作模式

    輸入模式:在文本文件當中輸入內容

    命令模式:可執行一些編輯命令

    末行模式:vim內置的命令行接口,執行vim的內置命令

vim的使用

打開文件

     vim [OPTIONS] FILE…

     +#:打開文件光標處在第#行

     +:打開文件光標處在最后一行

     +/pattern:打開文件光標處在第一次被pattern所匹配到的行

     -b:二進制方式打開文件

     -d:比較兩個文件的不同之處

     -m:制度方式打開文件

模式轉換

     默認為命令模式

     命令模式 –> 輸入模式

         -i:在當前光標處輸入

         -a:在當前光標后方輸入

         -o:在當前光標下方新建一行轉為輸入

         -I:在當前光標所在行的行首輸入

         -A:在當前光標所在行的行尾輸入

         -O:在當前光標上方新建一行轉為輸入

     鎖定和解鎖:

         ctrl+s:鎖定

         ctrl+q:解鎖

    

     輸入模式 –> 命令模式

         

    

     編輯模式 –> 末行模式

         :

    

     末行模式 –> 編輯模式

         Esc、Esc

         注意:輸入模式需要先轉為命令模式然后再轉為末行模式

    

關閉保存文件:

     命令模式

         ZZ:保存并退出

         ZQ:不保存退出

    

     末行模式:

         w:保存文本不退出

         q:不保存退出

         wq:保存并退出

         wq!:強制保存并退出

         x:保存并退出

         w /PATH/TO/SOMEFILE:將文件內容保存至指定文件中

         r /PATH/TO/SOMEFILE:將指定文件的內容讀取至當前文件中

         ! COMMAND:可臨時執行shell命令

         r! COMMAND:將命令的執行結果添加至當前光標下方

    

光標跳轉:

     字符間跳轉:

         h:左

         j:下

         k:上

         l:右

         #COMMAND:跳轉#個字符

    

     單詞間跳轉:

         w:跳轉至下個單詞的詞首

         e:跳轉至下個單詞的詞尾

         b:跳轉至上個單詞的詞首

         #COMMAND:跳轉#個單詞

    

     行尾行首跳轉:

         ^:非空白字符行首

         0:絕對行首

         $:跳轉至行尾

        

     當前頁面跳轉

         H:頁首

         M:頁中

         L:頁尾

    

     行間跳轉:

         #G:跳轉至第#行

         G:跳轉至尾行

         gg:跳轉至首行

    

     句間跳轉:以.為分隔

         ):跳轉下一句

         (:跳轉上一句

    

     段落跳轉:以空行為分隔符

         }:跳轉至下一段落

         {:上一段落

翻屏操作:

     Ctrl+d:向文件尾部翻半屏

     Ctrl+f:向文件尾部翻一屏

     Ctrl+u:向文件首部翻半屏

     Ctrl+b:向文件首部翻一屏

     Enter:逐行向后翻

命令模式操作:

     字符編輯:

         x:刪除光標處的字符

         #x:刪除光標以右的#個字符

         xp:當前光標所在處的字符與光標后的字符做交換

         ~:轉換大小寫

    

     替換命令:

         r:替換光標所在處的字符

         R:開啟替換模式

    

     刪除命令:

         d:刪除,可結合光標跳轉字符,實現范圍刪除

         d^:刪除當前光標所在行以左的所有字符

         d$:刪除當前光標所在行以右的所有字符

         dw:刪除當前光標所在處下一個單詞

         de:刪除當前光標所在處的下一個單詞

         db:刪除當前光標所在處的上個單詞

         dd:刪除光標所在處的一整行

         #dd:刪除光標所在行開始向下#行

         D:等于d$

    

     復制命令:

         y:復制,可結合光標跳轉字符

         y$:復制光標所在行以右的所有字符

         y^:復制光標所在行以左的所有字符

         yw:復制光標所在處下個單詞

         ye:復制光標所在處下個單詞

         yb:復制光標所在處上個單詞

         y0:復制光標所在行以左的所有字符,包含空白字符

         yy:復制當前光標所在行

         #yy:復制光標所在行向下#行

         Y:復制光標所在行

    

     粘貼命令:

         p:緩沖區中的內容如果為整行,則粘貼在當前光標所在行的下方;否則,粘貼至當前光標所在處的后方

         P:緩沖區中的內容如果為整行,則粘貼在當前光標所在行的上方;否則,粘貼至當前光標所在處的前方

    

     改變命令:

         c:編輯模式 –> 輸入命令,實現刪除操作

         c$:刪除光標所在處以右的所有字符并轉為輸入模式

         c^:刪除光標所在處以左的所有字符并轉為輸入模式

         c0:刪除光標所在處以左的所有字符并轉為輸入模式,包含空白字符

         cw:刪除光標所在處下一個單詞并轉為輸入模式

         ce:刪除光標所在處下一個單詞并轉為輸入模式

         cb:刪除光標所在處上一個單詞并轉為輸入模式

         cc:刪除光標所在行并轉為輸入模式

         #cc:刪除當前光標所在行向下#行并轉為輸入模式

         C:刪除當前光標至行尾并轉為輸入模式

    

     一次性復制粘貼多次內容:

         100i zhai Esc:zhai可粘貼100次

    

可視化模式:

     v:按字符選定

     V:按行選定

     可結合編輯命令:d,c,p,y

     Ctrl+v:面向塊

撤銷操作:

     u:撤銷前一次操作

     #u:撤銷前#次操作

     U:撤銷光標所在行所有此行的更改操作

     .:重復前一次操作

     n.:重復前n次操作

末行模式:

     地址定界

         :start_line,end_line

         #:指定的單個行

         #,#:從左側的#行開始,到右側之間的所有行

         #,+n:從左側的#行開始向后加n行

         .:當前行

         $:最后一行

         $-1:表示倒數第二行

         %:表示全文,相當于1,$

         /pat1/,/pat2/:第一次被pat1所匹配到的行到第一次被pat2所匹配到的行結束,之間的所有內容

         #,/pat/:從指定的行開始到被第一次被pat匹配到的行結束,之間的所有內容

         /pat/,#:從第一次被pat匹配到的行開始到第#行結束,之間的所有內容

    

     后面可跟編輯命令:

         d:刪除

         y:復制

         w /PATH/TO/FILE:將范圍內的行保存至指定文件中

         r /PATH/TO/FILE:將指定文件的內容插入指定的所有行處

    

     查找:

         /PATTERN:從當前光標所在處向文件尾部查找

         ?PATTERN:從當前光標所在處向文件首部查找

         n:光標跳轉至下一個被查找到的內容

         N:與n相反

vim寄存器:

     有26個命名寄存器和1個無命名寄存器,存放至不同剪切板中

     a,b,…,z用"寄存器表示,存放在數字和命令之間

     如:3"ayy表示復制3行達到a寄存器中

     "ap:表示將a寄存器中的內容粘貼

編輯二進制文件:

     vim -b BINFILE

     擴展命令模式下,利用xxd命令轉換為可讀的十六進制

     :%!xxd

     編輯二進制文件

     擴展命令模式下,利用xxd命令轉換回二進制

     :%!xxd –r

    

    

多文件模式:

     vim FILE1 FILE2 FILE3 …

     :next 下一個文件

     :prev 上一個文件

     :last 最后一個文件

     :first 第一個文件

     :wall 保存所有

     :qall 不保存退出所有

     :wqall 保存所有并退出

使用多窗口:

     多文件分割

         vim -o|O FILE1 FILE2 FILE3 …

         -o:水平分割

         -O:垂直分割

         在窗口間切換:Ctrl+w,左右箭頭

    

     單個文件:

         Ctrl+w,s:水平分割

         Ctrl+w,v:垂直分割

         Ctrl+w,q:取消相鄰窗口

         Ctrl+w,o:取消全部窗口

         :qall 退出所有

    

定義vim工作特性:

     配置文件:永久有效

         全局:/etc/vimrc

         用戶:~/.vimrc

    

     擴展模式:當前vim進程有效

         (1)行號

             顯示行號:set number可簡寫為set nu

             取消行號:set nonumber可簡寫為set nonu

         (2)括號成對匹配

             匹配:set showmatch可簡寫為set sm

             取消匹配:set noshowmatch可簡寫為set nosm

         (3)自動縮進

             縮進:set ai

             取消:set noai

         (4)高亮搜索

             啟用:set hlsearch

             禁用:set nohlsearch

         (5)語法高亮

             啟用:syntax on

             禁用:syntax off

         (6)忽略字符大小寫

             啟用:set ic

             禁用:set noic

         (7)文件格式

             啟用:fileformat=unix

             禁用:fileformat=dos

    

vim內置幫助

     :help

     vimtutor

練習及作業:

1.復制/etc/profile至/tmp/目錄,用查找替換命令刪除/tmp/profile文件中的行首的空白字符

 47 HOSTNAME=`/bin/hostname 2>/dev/null`
 48 HISTSIZE=1000
 49 if [ "$HISTCONTROL" = "ignorespace" ] ; then
 50 export HISTCONTROL=ignoreboth
 51 else
 52 export HISTCONTROL=ignoredups
 53 fi
 54 
 55 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
 56     
 57 # By default, we want umask to get set. This sets it for login shell
 58 # Current threshold for system reserved uid/gids is 200
 59 # You could check uidgid reservation validity in
 60 # /usr/share/doc/setup-*/uidgid file
 61 if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
 62 umask 002   
 63 else            
 64 umask 022   
 65 fi  
 66 
 67 for i in /etc/profile.d/*.sh ; do
 68 if [ -r "$i" ]; then
 69 if [ "${-#*i}" != "$-" ]; then
 70 . "$i" 
 71 else    
 72 . "$i" >/dev/null 2>&1
 73 fi      
 74 fi  
 75 done
 76     
 77 unset i
 78 unset -f pathmunge
:%s@^[[:space:]]\+@@

2.復制/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令為/tmp/functions的每行開頭為空白字符的行的行首添加一個#號

949 #       [ -z "$key" ] && plymouth --hide-splash
950 #       /sbin/cryptsetup $params ${key:+-d $key} create "$dst" "$src" <&1 2>/dev/null && success || failure
951 #       rc=$?
952 #       [ -z "$key" ] && plymouth --show-splash
953 #   fi
954 #   if [ $rc -ne 0 ]; then
955 #       ret=1
956 #       continue
957 #   fi
958 #   if [ -b "/dev/mapper/$dst" ]; then
959 #       if [ "$makeswap" = "yes" ]; then
960 #       mkswap "/dev/mapper/$dst" 2>/dev/null >/dev/null
961 #       fi
962 #       if [ "$mke2fs" = "yes" ]; then
963 #       if mke2fs "/dev/mapper/$dst" 2>/dev/null >/dev/null \
964 #           && mdir=$(mktemp -d /tmp/mountXXXXXX); then
965 #           mount "/dev/mapper/$dst" "$mdir" && chmod 1777 "$mdir"
966 #           umount "$mdir"
967 #           rmdir "$mdir"
968 #       fi
969 #       fi
970 #   fi
971 #    done < /etc/crypttab
972 #    return $ret
973 }
974 
975 # A sed expression to filter out the files that is_ignored_file recognizes
976 __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
977 
978 #if we have privileges lets log to kmsg, otherwise to stderr
979 if strstr "$(cat /proc/cmdline)" "rc.debug"; then
980 #        [ -w /dev/kmsg ] && exec 30>/dev/kmsg && BASH_XTRACEFD=30
981 #        set -x
982 fi
:%s@^[[:space:]]\+@#&@

作業題:

1.如何設置tab縮進為4個字符?

在末行模式輸入set ts=4即可

2.復制/etc/rc.d/init.d/functions文件至/tmp目錄;替換/tmp/functions文件中的/etc/sysconfig/init為/var/log

vim文本編輯器6N]0@[@L~XL6M`KFDR5RG9Q.png

3.刪除/tmp/functions文件中所有以#開頭,且#后面至少有一個空白字符的行的行首的#號

GEB14GWY$6W71]{_0%_6C$1.png

原創文章,作者:zhai796898,如若轉載,請注明出處:http://www.www58058.com/32859

(0)
zhai796898zhai796898
上一篇 2016-08-15
下一篇 2016-08-15

相關推薦

  • FHS文件系統各目錄功能

        FHS文件系統各目錄功能 前言                  FHS (Files system Hiserarchy Standard)…

    Linux干貨 2016-10-17
  • 馬哥教育N22期第五周作業

    1、顯示當前系統上root、fedora或user1用戶的默認shell; [root@localhost ~]# egrep "^root|fedora|user1" /etc/passwd root:x:0:0:root:/root:/bin/bash fedora:x:1002:1002::/…

    Linux干貨 2016-09-15
  • Linux-文件系統初識

    Linux文件系統

    2018-03-14
  • 馬哥教育網絡班22期+第8周課程練習

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋:是連接兩個局域網的基于MAC地址數據存儲轉發設備,工作于數據鏈路層 集線器:所有端口處于同一個廣播域和沖突域中,帶寬共享,工作于物理層 二層交換機:多端口網橋,一個端口一個沖突域,默認所有端口位于同一個廣播域中,可以劃分vlan,隔離廣播域,帶寬獨享 三層交換機:具有路由功…

    Linux干貨 2016-10-17
  • 20160809作業

    一、如何設置tab縮進為4個字符       臨時設置:set tabstop=4       全局設置vim /etc/vimrc—>添加set tabstop=4       當前用戶生效,手動添加文…

    Linux干貨 2016-08-10
欧美性久久久久