6.vim編輯器使用方法總結


   vi: visual interface,文本編輯器
    vim: vi improved,vi的增強版

    文本:ASCII,Unicode,
    文本編輯器種類:
        行編輯器:sed,
        全屏編輯器:nano,vi
vim:模式化的編輯器
    基本模式:
        編輯模式,也叫命令模式
        輸入模式
        末行模式:內置的命令行接口
模式轉換:
        編輯模式 --> 輸入模式
            i: insert,在光標所在處前面輸入
            a: append,追加,在光標所在處后面輸入
            o: 在當前光標所在行的下方打開一個新行并轉換為輸入模式;
            I: 在當前行的行首輸入;
            A: 在當前行的行尾輸入;
            O: 在當前光標所在行的上方打開一個新行并轉換為輸入模式;
        輸入模式 --> 編輯模式
            ESC
        編輯模式 --> 末行模式
            :
        末行模式 --> 編輯模式
            兩次ESC
關閉文件:
    :q 退出
    :q! 強制退出,丟棄做出的修改;
    :wq 保存后退出
    :x 保存退出
    :w /PATH/TO/SOMEFILE 保存到其他文件

    命令模式下:ZZ 保存退出          
光標跳轉:
    1. 字符間跳轉
        h,j,k,l
        h: 左
        l:右
        j:下
        k: 上
        #COMMAND: 挑戰有#指定的個數的字符

    2. 單詞間跳轉
        w:當前或下一個單詞的詞首
        b:當前或前一個單詞的詞首
        e: 跳轉至當前或下一個單詞的詞尾
        #COMMAND: 由#指定一次跳轉的單詞數

    3. 行首行尾跳轉:
        ^:跳轉至行首的第一個非空白字符
        0:跳轉至行首
        $:跳轉至行尾:

    4. 行間移動:
        #G:跳轉至由#指定的行;
        G:最后一行;
        gg或1G:第一行

    5. 句間移動:
        ): 下一個句子
        (: 前一個句子

    6. 段間移動:
        }:下一個段落
        {:上一個段落
vim編輯命令:
    字符編輯:
        x:刪除光標處的單個字符;
        #x: 刪除光標處起始地#個字符
        xp:交換光標所在處及其后面字符的位置;

    刪除命令:
        d:刪除命令,可結合光標跳轉字符實現范圍刪除;
            d$:
            d^:
            d0:
            dw:
            de:
            db:
            #COMMAND
                3dw:
            dd:刪除光標所在行
                #dd
                #COMMAND  2dd:包括光標所在行向下共刪除2行;

    粘貼命令(P,put,paste):
        p(小寫): 緩沖區中存儲的如果是整行,則粘貼之當前光標所在行的下方;否則,粘貼之光標所在處的后面;
        P(大寫): 緩沖區中存儲的如果是整行,則粘貼之當前光標所在行的上方;否則,粘貼之光標所在處的前面;

    復制(y,yank)
        y:復制,工作行為與d命令相似
        y0
        y^
        y$
        ye
        yw
        yb
        #COMMAND
            yy: 復制行
        #yy: 復制多行;

    改變命令(c,change)
        c: 修改
        編輯模式  --> 輸入模式
            c$
            c0
            c^
            cb
            ce
            cw
            #COMMAND
            cc: 刪除行并輸入內容
            #cc: 刪除多行并輸入內容

    替換命令(r,replace)
        r:替換光標所在處的字符
        rx:將其替換為x字符
    其他編輯操作:
        可視化模式:
            v:按字符選定
            V: 按行選定
            Note: 經常結合編輯命令
                d,c,y

        撤消之前的編輯:
            u(undo):撤銷此前的操作:
                #u: 撤消指定次數的操作;

        撤消此前的撤消:
            CTRL+r

        重復上一次操作:
            . 點號

        翻屏操作:
            ctrl+f:向文件尾部翻一屏
            ctrl+b:向文件首部翻一屏

            ctrl+d:向文件尾部翻半屏
            ctrl+u:向文件首部翻半屏
vim中的末行模式:
    內建的命令行接口:
        1. 地址定界
            :start_pos,end_pos
                #: 具體的第#行,例如2,第2行
                #1,#2: 從#1行至#2行;
                #1,+#2: 從#1行起,向下再多加#2行,如1,+5:表示從第一行及其后5行,共6行;
                .: 點號,當前行
                $:最后一行
                .,$-1: 當前行至倒數第二行
                %:全文,相當于1,$
                /pat1/,/pat2/:從第一次被pat1模式匹配到的行開始至第一次被pat2匹配到的行結束;
                常用方法:
                    1,/pat/
                    /pat/,$

                使用方式:后跟一個編輯命令
                    d,
                    y,
                    w /path/to/somefile:將范圍內的行另存至其他文件
                    r /path/from/somefile :在指定位置插入指定文件的所有內容

        2. 查找
            /pattern: 從當前光標所在處向文件尾部查找
            ?pattern: 從當前光標所在處向文件首部查找
                n: 與命令同方向
                N:與命令反方向

        3.查找并替換:
            s: 在末行模式下完成查找替換作用
            s/要查找的內容/替換為的內容/修飾符
                這里的分隔符可以使用其他字符代替,如s@@@  s###
                要查找的內容:可使用模式
                替換為的內容:不可使用模式,但可以使用\1,\2..等后向引用,還可以使用"&"引用前面查找時找到的整個內容;
        4. 修飾符:
                i: 忽略大小寫
                g:全局替換,默認情況下,每一行只替換第一次出現;
                示例:
                    .,$s/r\(..\)t/R\1T/g: 將r..t替換為R..T
                    %s/linux/&er/ :全文的第一個linux替換為linuxer
                    1,10s/how/HOW/g : 將第一至第十行的how全部替換為HOW
                    %s/\etc\/fstabl/\/var\/log/g  將/etc/fstab替換為/var/log.
多文件模式
        vim FILE1 FILE2 FILE3
        next:下一個
        prev 前一個
        first:第一個
        last 最后一個
        :wall 保存所有
        :qall 退出所有

窗口分隔模式:
    vim -o 或者 -O FILE1 FILE2
        -o: 水平分隔,上下兩個文件
        -O:垂直分割,左右兩個文件

在窗口間切換:
    ctrl+w+方向鍵
        :q 退出當前
        :qall 退出所有

單文件窗口分隔:
    ctrl+w+s, split,水平分隔
    ctrl+w+v, vertical 垂直分割
    :qall
    :wqall
定制vim的工作特性:
    配置文件:
        全局:/etc/vimrc
        個人:~/.vimrc
        末行:當前vim進程有效

    1.行號:
        顯示:set number,簡寫為set nu
        取消顯示:set nonumber,簡寫 set nonu
    2. 括號匹配:
        匹配;set showmatch,簡寫為 set sm
        取消:set nosm
    3. 自動縮進
        啟用:set autoindent,簡寫為set ai
        禁用:set noai
    4. 高亮搜索
        啟用:set hlsearch  (hilightsearch)
        禁用:set nohlsearch
    5. 語法高亮
        啟用:syntax on
        禁用:syntax off
    6. 忽略字符大小寫
        啟用:set ic (ignorecase)
        禁用:set noic
    7. 獲取幫助:
        末行模式下help, :help
        :help + 關鍵字
vim自帶的練習教程:
    centOS7有中文版
    vimtutor

vim編輯器使用練習

1. 復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;

[root@rhel-6 ~]# vim /tmp/rc.sysinit 
:%s/^[[:space:]]\+/#&/g
# 或者是
:1,$s@^\([[:space:]]\+\)@#\1@g

2. 復制/boot/grub/grub.conf/tmp目錄中,刪除/tmp/grub.conf文件中的行首的空白字符;

[root@rhel-6 ~]# vim /tmp/grub.conf
:%s/^[[:space:]]\+//g

3. 刪除/tmp/rc.sysinit文件中的以#開頭,且后面跟了至少一個空白字符的行首#和空白字符;

[root@rhel-6 ~]# vim /tmp/rc.sysinit
:%s/^#[[:space:]]\+//g

4. 為/tmp/grub.conf文件中前三行的行首加#號;

[root@rhel-6 ~]# vim /tmp/grub.conf
:1,3s/.*/#&/

5. 將/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0gpgcheck=0的最后的0修改為1;

[root@CentOS-7 tmp]# vi /etc/yum.repos.d/CentOS-Media.repo
:%s/=0/=1/g

定時任務配置練習

6. 每4小時執行一次對/etc目錄的備份,備份至/backup目錄中,保存的目錄名為形如etc-201504020202

00 */4 * * * /bin/cp -ar /etc/ /backup/etc-$(date +%Y%m%d%H%M) &>/dev/null

7. 每周2,4,6備份/var/log/messages文件至/backup/messages_logs/目錄中,保存的文件名形如messages-20150402

00 00 * * 2,4,6 /bin/cp -a /var/log/messages /backup/messages_logs/messages-$(date +%Y%m%d) &>/dev/null

8. 每天每兩小時取當前系統/proc/meminfo文件中的所有以S開頭的信息至/stats/memory.txt文件中

00 */2 * * * /bin/egrep '^(S|s)' /proc/meminfo >> /stats/memory.txt &>/dev/null

9. 工作日的工作時間內,每兩小時執行一次echo “howdy”

00 8-18/2 * * 1-5 /bin/echo "howdy" &>/dev/null

腳本編程練習

10-11. 創建目錄/tmp/testdir-當前日期時間,在此目錄創建100個空文件:file1-file100

[root@rhel-6 test]# cat test1.sh 
#!/bin/bash
TestDir=/tmp/testdir-$(date +%Y%m%d%H%M)
TestLog=${TestDir}/failure.log

mkdir ${TestDir} &>/dev/null
[[ $? -eq 0 ]] && echo "Create ${TestDir} success."

for (( i = 1; i < 101; i++ )); do
    touch ${TestDir}/file$i || echo "Failure:file$i" >> ${TestLog}
done

if [[ -s "${TestLog}" ]]; then
    cat ${TestLog}
else
    echo 'Create file1-file100 success.'
fi

[root@rhel-6 test]# sh test1.sh 
Create /tmp/testdir-201608132309 success.
Create file1-file100 success.

12.  顯示/etc/passwd文件中位于第偶數行的用戶的用戶名;

[root@rhel-6 test]# cat test2.sh 
#!/bin/bash
NO_passwd=$(cat /etc/passwd | wc -l)

echo 'The UserName list is:'
#for (( i = 0; i <= ${NO_passwd}; i+=2 )); do
for i in $(seq 2 2 ${NO_passwd});do
    head -n $i /etc/passwd | tail -n 1 | cut -d':' -f1
done

[root@rhel-6 test]# sh test2.sh 
The UserName list is:
bin
adm
...
...

13. 創建10用戶user10-user19;密碼同用戶名;

[root@rhel-6 test]# cat test3.sh 
#!/bin/bash
for i in {10..19}; do
    id user$i &>/dev/null 
    if [[ $? -eq 0 ]]; then
        echo "user$i exist."
        echo user$i | passwd --stdin user$i &>/dev/null
        [[ $? -eq 0 ]] && echo "user$i password change success." || echo "user$i password change failed."
    else
        useradd user$i 
        echo "user$i" | passwd --stdin user$i &>/dev/null
        [[ $? -eq 0 ]] && echo "Create user$i success." || echo "Creat user$i failure."
    fi
done

[root@rhel-6 test]# useradd user13

[root@rhel-6 test]# sh test3.sh 
Create user10 success.
...
user13 exist.
user13 password change success.
Create user14 success.
...

14-15. 在/tmp/創建10個空文件file10-file19,把file10的屬主和屬組改為user10,依次類推。

[root@rhel-6 test]# cat test4.sh 
#!/bin/bash
TmpFile=/tmp/file 
for i in {10..19}; do
    if [[ -f "${TmpFile}$i" ]]; then
        echo "${TmpFile}$i exist."
        chown user$i:user$i ${TmpFile}$i && echo "${TmpFile}$i: owner and group change to user$i:user$i"
    else
        touch "${TmpFile}$i"  
        if [[ $? -eq 0 ]]; then
            echo "${TmpFile}$i create success."
            chown "user$i:user$i" ${TmpFile}$i && echo "${TmpFile}$i: owner and group change to user$i:user$i"
        else
            echo "${TmpFile}$i create failure."
        fi
    fi  
done

[root@rhel-6 test]# touch /tmp/file12
[root@rhel-6 test]# sh test4.sh 
/tmp/file10 create success.
/tmp/file10: owner and group change to user10:user10
/tmp/file11 create success.
/tmp/file11: owner and group change to user11:user11
/tmp/file12 exist.
/tmp/file12: owner and group change to user12:user12
...
...

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

(0)
N27_jiangyefanN27_jiangyefan
上一篇 2017-08-06 22:21
下一篇 2017-08-06 22:57

相關推薦

  • linux基礎中的基礎 —- 用戶管理、文本處理、正則表達式等命令的使用(博客第三周作業)

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。     who | cut -d' ' -f1 | uniq 2、取出最后登錄到當前系統的用戶的相關信息。     who | tail -1 3、取出當前系統上被用戶當作其默認shell的最…

    Linux干貨 2016-07-22
  • 內核編譯

    單內核體系設計、但充分借鑒了微內核設計體系的優點,為內核引入模塊化機制。 內核組成部分核心,一般為bzImage,通常在/boot目錄下,名稱為vmlinuz-VERSION-RELEASE;: kernel: 內核 kernel object: 內核對象,一般放置于/lib/modules/VERSION-RELEASE/ [ ]: N [M]: M [*…

    Linux干貨 2015-11-06
  • Linux手動編譯源代碼文件

    一、簡介     Linux系統上程序包安裝的方式多種多樣,一般來說可通過rpm包安裝、yum在線安裝等方式實現。但有時候為了實現某種功能,而這種功能在通常情況下又不是太常用或是因為其他原因,不能通過yum下載安裝或在網上沒有找到rpm包,只是找到了程序安裝包的源代碼的話,這種情況下我們就可以對源代碼直接進行編譯安裝,以便解決這種臨時需求…

    Linux干貨 2015-09-26
  • 軟件編譯安裝小結

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1439073     本文主要針對 configure 和 cmake 做一個介紹以及我們重新配置編譯參數文件時,都需要做哪些清…

    Linux干貨 2016-08-15
  • CentOS6.6上編譯安裝httpd2.4

    簡介    現在apache軟件基金會正在維護的httpd項目有三個版本,分別為Version 2.4,Version 2.2與Version 2.0。    三個版本的區別暫不一一介紹,有興趣的可以去httpd.apache.org了解,下面著重介紹httpd 2.4版本。新特性 &nb…

    Linux干貨 2015-06-26
  • 馬哥教育網絡班19期第七周課程練習

    第七周作業 1.創建一個10G分區,并格式化為ext4文件系統:   (1)要求甘block大小為2048,預留空間百分比為2,卷標為MYDATA,默認掛載屬性包含acl;   (2)掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; [root@nginx ~]# fdisk /dev/sdd D…

    Linux干貨 2016-06-23

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-08-20 19:03

    VIM基本用法掌握后,可以嘗試擴展一下高階用法和一些插件功能。

欧美性久久久久