Vim多行縮排技巧

來源:互聯網
上載者:User
1.按v進入visual狀態,選擇多行,用>或<縮排或縮出

2.通常根據語言特徵使用自動縮排排版:在命令狀態下對當前行用== (連按=兩次), 或對多行用n==(n是自然數)表示自動縮排從當前行起的下面n行。你可以試試把代碼縮排任意打亂再用n==排版,相當於一般IDE裡的code format。使用gg=G可對整篇代碼進行排版。 3.gg   shift+G 首尾4.全文字眼替換  %s/source/dist/g 或者 :1,$ s/source/dist/g  :s/vivian/sky/ 替換當前行第一個 vivian 為 sky

  :s/vivian/sky/g 替換當前行所有 vivian 為 sky

  :n,$s/vivian/sky/ 替換第 n 行開始到最後一行中每一行的第一個 vivian 為 sky

  :n,$s/vivian/sky/g 替換第 n 行開始到最後一行中每一行所有 vivian 為 sky

  n 為數字,若 n 為 .,表示從當前行開始到最後一行

  :%s/vivian/sky/(等同於 :g/vivian/s//sky/) 替換每一行的第一個 vivian 為 sky

  :%s/vivian/sky/g(等同於 :g/vivian/s//sky/g) 替換每一行中所有 vivian 為 sky

  可以使用 # 作為分隔字元,此時中間出現的 / 不會作為分隔字元

  :s#vivian/#sky/# 替換當前行第一個 vivian/ 為 sky/

  :%s+/oradata/apras/+/user01/apras1+ (使用+ 來 替換 / ): /oradata/apras/替換成/user01/apras1/

  * ************************************

  1.:s/vivian/sky/ 替換當前行第一個 vivian 為 sky

  :s/vivian/sky/g 替換當前行所有 vivian 為 sky

  2. :n,$s/vivian/sky/ 替換第 n 行開始到最後一行中每一行的第一個 vivian 為 sky

  :n,$s/vivian/sky/g 替換第 n 行開始到最後一行中每一行所有 vivian 為 sky

  (n 為數字,若 n 為 .,表示從當前行開始到最後一行)

  3. :%s/vivian/sky/(等同於 :g/vivian/s//sky/) 替換每一行的第一個 vivian 為 sky

  :%s/vivian/sky/g(等同於 :g/vivian/s//sky/g) 替換每一行中所有 vivian 為 sky

  4. 可以使用 # 作為分隔字元,此時中間出現的 / 不會作為分隔字元

  :s#vivian/#sky/# 替換當前行第一個 vivian/ 為 sky/

  5. 刪除文本中的^M

  問題描述:對於換行,window下用斷行符號換行(0A0D)來表示,linux下是斷行符號(0A)來表示。這樣,將window上的檔案拷到unix上用時,總會有個^M.請寫個用在unix下的過濾windows檔案的分行符號(0D)的shell或c程式。

  · 使用命令:cat filename1 | tr -d “^V^M” > newfile;

  · 使用命令:sed -e “s/^V^M//” filename > outputfilename。需要注意的是在1、2兩種方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必須要手工進行輸入,而不是粘貼。

  · 在vi中處理:首先使用vi開啟檔案,然後按ESC鍵,接著輸入命令:%s/^V^M//。

  · :%s/^M$//g

  如果上述方法無用,則正確的解決辦法是:

  · tr -d "/r" < src >dest

  · tr -d "/015" dest

  · strings A>B

  6. 其它

  利用 :s 命令可以實現字串的替換。具體的用法包括:

  :s/str1/str2/ 用字串 str2 替換行中首次出現的字串 str1

  :s/str1/str2/g 用字串 str2 替換行中所有出現的字串 str1

  :.,$ s/str1/str2/g 用字串 str2 替換本文當前行到末尾所有出現的字串 str1

  :1,$ s/str1/str2/g 用字串 str2 替換本文中所有出現的字串 str1

  :g/str1/s//str2/g 功能同上

  從上述替換命令可以看到:g 放在命令末尾,表示對搜尋字串的每次出現進行替換;不加 g,表示只對搜尋

  字串的首次出現進行替換;g 放在命令開頭,表示對本文中所有包含搜尋字串的行進行替換操作。

[精華] VI進階命令集錦

鑒於大家在使用VI 的時候有一定的陌生,在這裡借花獻佛,從兄弟版[SHELL]中整理出以下關於VI編程的進階技巧,希望對大家學習UNIX有所協助,並希望大家能結合使用HPUX的心得體會對這些經驗進行進一步的擴充。

1.交換兩個字元位置

xp
2.上下兩行調換
ddp
3.把檔案內容反轉
:g/^/m0/       (未通過)

4.上下兩行合并 
J
5.刪除所有行 
dG
6.從當前位置刪除到行尾
d$
7.從當前位置複製到行尾
y$ 如果要粘貼到其他地方 p 就可以了

由於vi 是建立在 EX 上的 所以 當鍵入 : 時就來到了 EX 命令狀態 
8.
:ab string strings 
例如 &quot;:ab usa United States of America&quot; ,
當你在文見裡插入 usa 時 
United States of America 就蹦出來了
9.
:map keys new_seq 
定義你當前 鍵盤命令 
10.
:set [all] 
vi or ex  的編輯狀態
如 顯示每行 :set nu 
11.
在命令狀態下,nyy表示拷貝從游標行起的下n行內容,p表示paste,可剛複製的內容粘貼在游標處的
下面。 

12.
單個字元替換用r,覆蓋多個字元用R,用多個字元替換一個字元用s,整行替換用S 

13.

 :%s/old_word/new_word/g
這個指令是於在整個檔案中替換特定字串  
 
14.游標控制

k:上移 nk 上移n行
j:下移 nj 下移n行

將游標移到第n行,按下 mk
將游標移到第m行,按下 &quot;ay'k
即將第n到m的行存到a寄存器,以此類推,b,c........寄存器等

這樣就可以將你常用的需要複用的內容粘貼到不同的寄存器中以備用

想粘貼到某處,直接將游標移到某地,按下 ‘ap 即可,以此類推,b,c........寄存器等

在當前螢幕中
H 跳到第一行
M 跳到中間一行
L 跳到最後一行 

15.
表8-2 刪除命令
刪除命令操作
d l 刪除當前字元(與x命令功能相同)
d 0 刪除到某一行的開始位置
d ^ 刪除到某一行的第一個字元位置(不包括空格或TA B字元)
d w 刪除到某個單詞的結尾位置
d 3 w 刪除到第三個單詞的結尾位置
d b 刪除到某個單詞的開始位置
d W 刪除到某個以空格作為分隔字元的單詞的結尾位置
d B 刪除到某個以空格作為分隔字元的單詞的開始位置
d 7 B 刪除到前面7個以空格作為分隔字元的單詞的開始位置
d) 刪除到某個語句的結尾位置
d 4) 刪除到第四個語句的結尾位置
d( 刪除到某個語句的開始位置
d } 刪除到某個段落的結尾位置
d { 刪除到某個段落的開始位置
d 7 { 刪除到當前段落起始位置之前的第7個段落位置
d d 刪除當前行
d /t e x t 刪除從文本中出現“ t e x t”中所指定字樣的位置,一直向前直到下一個該字樣所出現的
位置(但不包括該字樣)之間的內容
d fc 刪除從文本中出現字元“c”的位置,一直向前直到下一個該字元所出現的位置(包括
該字元)之間的內容
d tc 刪除當前行直到下一個字元“ c”所出現位置之間的內容
D 刪除到某一行的結尾
d $ 刪除到某一行的結尾
5 d d 刪除從當前行所開始的5行內容
d L 刪除直到螢幕上最後一行的內容
d H 刪除直到螢幕上第一行的內容
d G 刪除直到工作緩衝區結尾的內容
d 1 G 刪除直到工作緩衝區開始的內容

修改命令操作
c l 更改當前字元
c w 修改到某個單詞的結尾位置
c 3 w 修改到第三個單詞的結尾位置
c b 修改到某個單詞的開始位置
c W 修改到某個以空格作為分隔字元的單詞的結尾位置
c B 修改到某個以空格作為分隔字元的單詞的開始位置
c 7 B 修改到前面7個以空格作為分隔字元的單詞的開始位置
c 0 修改到某行的結尾位置
c) 修改到某個語句的結尾位置
c 4) 修改到第四個語句的結尾位置
c( 修改到某個語句的開始位置
c } 修改到某個段落的結尾位置
c { 修改到某個段落的開始位置
c 7 { 修改到當前段落起始位置之前的第7個段落位置
c tc 修改當前行直到下一個字元c所出現位置之間的內容
C 修改到某一行的結尾
c c 修改當前行
5 c c 修改從當前行所開始的5行內容

 .重複上一次修改!  
 

表8-4 替換命令
替換命令操作
s 將當前字元替換為一個或多個字元
S 將當前行替換為一個或多個字元
5 s 將從當前字元開始的5個字元替換為一個或多個字元

vi替換使用規則:
:g/s1/s/s2/s3/g
第一個g表示對每一個包括s1的行都進行替換,第二個g表示對每一行包括s1的行所有的s2都用s3替換
s表示替換,s2是要被替換的字串,他可以和s1相同(如果相同的話用//代替),s3是替換字串 

16.

fx
往右移動到 x 字元上
Fx
往左移動到 x 字元上
tx
往右移動到 x 字元前
Tx
往左移動到 x 字元後
(注意:以上四個命令中,其中x是鍵入的字元)
&#59;
分號,配合 f 和 t 使用,重複一次 
,
逗號,配合 f 和 t 使用,反方向重複一次

17. vi 環境選項  Solaris ksh

noautoindent            nomodelines                     noshowmode
autoprint               nonumber                        noslowopen
noautowrite             nonovice                        tabstop=8
nobeautify              nooptimize                      taglength=0
directory=/var/tmp      paragraphs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tags
noedcompatible          prompt                          tagstack
noerrorbells            noreadonly                      term=vt100
noexrc                  redraw                          noterse
flash                   remap                           timeout
hardtabs=8              report=5                        ttytype=vt100
noignorecase            scroll=11                       warn
nolisp                  sections=NHSHH HUuhsh+c         window=23
nolist                  shell=/bin/ksh                  wrapscan
magic                   shiftwidth=8                    wrapmargin=0
mesg                    noshowmatch                     nowriteany
 

For C-Shell:
setenv EXINIT &quot;set nu&quot;
For Bourne or Korn Shell:
EXINIT=&quot;set nu&quot;&#59; export EXINIT 
For Korn Shell Only (alternate method): 
typeset -x EXINIT=&quot;set nu&quot;
在 .profile 裡設定 vi 的環境選項 , 以上均測試過 

18.標記文本

  mchar   用字母char標記當前游標的位置
  `char   移至char所標記處
  'char   移至char標記所在行的開頭處
  &quot;     移至當前行上一次所在位置(在游標移動之後)――一個雙引號
  ''    移至當前行上第一次所在位置的行的開頭處(在游標移動之後)――兩個單引號

19.
同時vi多個檔案時,CTRL-SHIFT-6回到上一個檔案,在本次vi的檔案和上次vi的檔案之間切換。
但是我發現一個BUG:在用CTRL-SHIFT-6切換到上一個檔案後,用:args查看多檔案vi狀態時,
螢幕底部仍然顯示目前vi的是剛才的檔案。
(在HP-UX,Solaris,AIX上通過)

也可以使用:
:e#
進行切換

20.
sco 下VI 要在文本前同樣的字元加用
%s/^/要加的內容/g      要在文本後同樣的字元加
%s/$/要加的內容/g  

21.
如何去掉文本中的 ^M 硬斷行符號?不必用binary傳回去再ascii傳回來的方式,用shell或者unix語句實現。

cat filename |tr -d '/015' >;newfile
不同的unix系統還存在一些其他不同的命令,如:doscp 
sed 也可以實現這個功能. 

dos2unix filename filename2
反之
unix2dos filename filename2 

在vi 中用:$s/^M//g
^是crtl-V crtl-M  

22.如何在“unix命令列”下將一個檔案的某字串用另一個串換掉

 sed 's/string1/string2/gp' file1 >; file2
 
 
23.將/etc/hosts下所有的地址都ping 2次

    1  #/usr/bin/sh
    2  #grad /etc/hosts and ping each address
    3  cat /etc/hosts|grep -v '^#' | while read LINE
    4  do
    5   ADDR=`awk '{print $1}'`
    6  for MACHINE in $ADDR
    7   do
    8     ping  $MACHINE -n 2
    9   done
   10  done

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.