Home | 簡體中文 | 繁體中文 | 雜文 | 打賞(Donations) | ITEYE 博客 | OSChina 博客 | Facebook | Linkedin | 知乎專欄 | Search | Email

第 2 章 Editor

目錄

2.1. VIM
2.1.1. New text file line delimiter
2.1.2. vim中的出現^M
2.1.3. tab 符
2.1.4. 粘貼是禁用格式化功能
2.1.5. Regular Expressions
2.1.5.1. search & replace
2.1.5.2. 會去掉vim檔案中的空白行
2.1.6. 大小寫轉換
2.1.7. split
2.1.8. vimrc
2.1.9. vimdiff - edit two or three versions of a file with Vim and show differences
2.1.9.1. 光標移動
2.1.9.2. 檔案合併
2.1.9.3. 上下文
2.1.9.4. 保存於退出
2.1.10. vim backup script
2.2. Eclipse
2.2.1. AnyEdit
2.2.2. Eclim
2.2.3. Vrapper
2.3. Komodo Edit
2.4. Syntext Serna Free
2.5. SciTE

2.1. VIM

Vi IMproved - enhanced vi editor (transitional package)

	
sudo apt-get install vim-perl vim-python vim-latexsuite
	
	

2.1.1. New text file line delimiter

		
:set ff
:set ff=dos
:set ff=unix
:set ff=mac
		
		

2.1.2. vim中的出現^M

			
sudo apt-get install tofrodos
dos2unix
			
		

輸入

:set notextmode		
		

2.1.3. tab 符

		
set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker
		
		

2.1.4. 粘貼是禁用格式化功能

:set paste

2.1.5. Regular Expressions

2.1.5.1. search & replace

%s/neo/leo/g
%s#/logs#/www#g
			

2.1.5.2. 會去掉vim檔案中的空白行

				
:%s/^\s*\n/
				
			

2.1.6. 大小寫轉換

將光標移動到想要大小寫轉換的地方然後鍵入

guw (大寫轉換成小寫)

gUw (小寫轉換成大寫)

g~w (是改變光標到詞尾)

guu gUU g~~ (是改變一行)

2.1.7. split

		
:split <filename> 	按拆分模式打開檔案,預設為上下拆分
:vsplit <filename>	左右拆分
		
		

Ctrl-w w

切換活動窗口

Ctrl-w Ctrl-w

同上

Ctrl-w h/j/k/l

切換活動窗口為 左/上/下/右 邊的窗口

:q

關閉光標所在的分屏

2.1.8. vimrc

		
neo@netkiller:~$ cat /home/neo/.vimrc
set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker
set paste
set ruler
set number
set nocp " don't open Vim in Vi-compatible mode
set bs=2 " setup backspace to delete previous char in insert mode
set encoding=utf-8 fileencodings= " set UTF-8 for all files
set autoindent
set smartindent
set t_Co=256
syntax on
set syntax=tt2html
set hlsearch
colorscheme elflord
		
		

2.1.9. vimdiff - edit two or three versions of a file with Vim and show differences

# vimdiff  FILE_LEFT  FILE_RIGHT
# vim -d  FILE_LEFT  FILE_RIGHT
		
# vim FILE_LEFT
:vertical diffsplit FILE_RIGHT
		

2.1.9.1. 光標移動

左右窗口聯動控制

:set scrollbind
:set noscrollbind
			

在各個差異點之間快速移動。

]c	跳轉到下一個差異點
[c	跳轉到上一個差異點
			

如果在命令前加上數字的話,可以跳過一個或數個差異點,從而實現跳的更遠。比如如果在位於第一個差異點的行輸入"2]c",將越過下一個差異點,跳轉到第三個差異點。

2.1.9.2. 檔案合併

			
檔案比較的最終目的之一就是合併,以消除差異。如果希望把一個差異點中當前檔案的內容複製到另一個檔案裡,可以使用命令
dp (diff "put")

如果希望把另一個檔案的內容複製到當前行中,可以使用命令
do (diff "get",之所以不用dg,是因為dg已經被另一個命令占用了)

如果希望手工修改某一行,可以使用通常的vim操作。如果希望在兩個檔案之間來回跳轉,可以用下列命令序列:
Ctrl-w, w

在修改一個或兩個檔案之後,vimdiff會試圖自動來重新比較檔案,來實時反映比較結果。但是也會有處理失敗的情況,這個時候需要手工來刷新比較結果:
:diffupdate

如果希望撤銷修改,可以和平常用vim編輯一樣,直接
<ESC>, u

但是要注意一定要將光標移動到需要撤銷修改的檔案窗口中。
			
			

2.1.9.3. 上下文

上下文的展開和查看
比較和合併檔案的時候經常需要結合上下文來確定最終要採取的操作。Vimdiff 預設是會把不同之處上下各 6 行的文本都顯示出來以供參考。其他的相同的文本行被自動摺疊。如果希望修改預設的上下文行數,可以這樣設置:
:set diffopt=context:3

可以用簡單的摺疊命令來臨時展開被摺疊的相同的文本行:
zo (folding open,之所以用z這個字母,是因為它看上去比較像摺疊着的紙)

然後可以用下列命令來重新摺疊:
zc (folding close)
			

2.1.9.4. 保存於退出

同時操作兩個檔案
在比較和合併告一段落之後,可以用下列命令對兩個檔案同時進行操作。比如同時退出:
:qa (quit all)

如果希望保存全部檔案:
:wa (write all)

或者是兩者的合併命令,保存全部檔案,然後退出:
:wqa (write, then quit all)

如果在退出的時候不希望保存任何操作的結果:
:qa! (force to quit all)
			

2.1.10. vim backup script

			
#!/bin/bash
########################################
# vim script for automatic backup by neo
########################################

datetime=`date +"%Y-%m-%d.%H:%M:%S"`
current_date=`date +"%Y-%m-%d"`
current_time=`date +"%H:%M:%S"`
filename=`basename $1`
original=$1

if [ -f ${original}.original ]
then
    echo "[${datetime}] [B] ${original} to ${original}.original" >> ~/backup/history.log
else
    cp ${original} ${original}.original
fi

if [ -d ~/backup/${current_date} ]
then
    echo "[${datetime}] [O] ${original}" >> ~/backup/history.log
else
    mkdir -p ~/backup/${current_date}
    echo [${datetime}] [C] mkdir ~/backup/${current_date} >> ~/backup/history.log
fi

backup=~/backup/${current_date}/${filename}.${current_time}
if [ -f ${original} ];
then
    cp ${original} ${backup}
    echo "[${datetime}] [B] ${original} to ${backup}" >> ~/backup/history.log
fi

vim ${original}



datetime=`date +"%Y-%m-%d.%H:%M:%S"`
current_date=`date +"%Y-%m-%d"`
current_time=`date +"%H:%M:%S"`
newfile=~/backup/${current_date}/${filename}.${current_time}

if [ -f ${original} ];
then
    if [ -f ${backup} ];
    then
        original_sha=`sha1sum ${backup} |awk -F ' ' '{print $1}'`
        newfile_sha=`sha1sum ${original} |awk -F ' ' '{print $1}'`

        if [ $original_sha = $newfile_sha ];
        then
            echo "[${datetime}] --- " >> ~/backup/history.log
            exit
        fi

    fi
    cp ${original} ${newfile}
    echo "[${datetime}] [M] ${original}" >> ~/backup/history.log
    echo "[${datetime}] [B] ${original} to ${newfile}" >> ~/backup/history.log

fi
echo "[${datetime}] --- " >> ~/backup/history.log
exit