發表文章

目前顯示的是有「vim」標籤的文章

VIM切換模式圖解說明

圖片
vim 是一個模式編輯器,一般的編輯器,每個鍵盤按鍵只會對應一種功能。 而模式編輯器在不同的模式,鍵盤按鍵所對應的功能就有所不同。

學習的困難

在我的學習事物的經驗中, 我發現了兩種令人會想停止學習的兩種情緒。 學不會的感覺--要學會接受「不懂」的狀態 任何東西剛開始學的時侯, 總是讓妳感覺到, 妳學得會嗎? 當你學習全新東西時, 這種感覺更是強烈。 我稱這種狀態叫作「不懂」。 舉一個實例來說明「不懂」, 當妳看到 btthedcd 這個字時, 應該會有「不懂」的感覺吧! 因為妳的記憶中, 沒有這個英文字的中文意思, 當頭腦找不到這個字時, 就會發出「不懂」的感覺。 但我要說的是, 「不懂」是學習一定會產生的感覺, 為什麼呢? 首先回到學習的定義, 學習就是學會自已原本不會的東西, 所以沒有「不懂」,那來的學習。 而這個感覺越強烈, 表示妳要學習的事物,妳是相當不熟悉, 所以妳的頭腦中可完全沒有碰過這個事物過。 所以若妳能接受越強列「不懂」的感覺, 表示妳能學習更多元且多樣化的事物。 當妳無法接受「不懂」的感覺, 那妳一感覺到「不懂」, 馬上就轉移注意力到妳熟悉的事物, 這樣妳內心世界永遠不會擴大, 只侷限在妳已熟悉的小框架。 挫折感--要用毅力去克服 強烈的「不懂」感, 往往令人深感挫折, 於是妳自然會避免去接觸。 但是忍受「不懂」感覺的能力, 卻是讓妳將來與眾不同的重要能力。 在所見即所得編輯器四處氾濫的今天, 學習 vim 來處理文字, 對大部份的人而言,絕對是陌生的。 vim 的特性就是它是鍵盤導向的編輯器, 所以對滑鼠的支援很少, 但是當妳的手指完全習慣後, 妳發現妳閉者眼睛也能編輯一份複雜的文件。 換個方式比喻, 剛開始學吉他時, 每一個和絃都要用一個手指一個手指的去按, 當吉他進入中級的程度時, 你可以發現妳不需要看手指以及擺在譜架上的和絃圖, 只要看到 Am ,手指就自動擺好。 當一開始我確認我想要鍵盤為主的編輯方式, 來節省我使用過度的眼力, 我開始持續不斷強迫自已用 vim, 只要是打字, 就算最後是要存成 word 檔, 我也在 vim 打完字, 再貼到 word 檔, 2, 3 個月後, vim 變成我的本能。 練習、練習、再練習, 不斷的去接觸,才能把這個東西學會。 當我嚴長壽「總裁獅子心」中提到的, 怕他就去研究他 一樣的, 妳必須不斷的接觸, 才能了解事物的真正本質, 那時妳也就熟悉了, 而且發現自已的能力又提升了。 同時要記住目前這件事的挫折感, 將來有能力、技巧可以輕鬆處理...

vim 很有用卻又不好記的功能

*比較兩個檔 :o f1 :vert diffsplit f2 就會對 f1 及 f2 作 diff *自定檔案型態 遇到某些檔以特定 syntax 開啟的設定存在 /vim/vim70/filetype.vim *在 ex script 取出目前正在編輯的檔案檔名的方法 (current filename) filename 通常就是目前 buffer 的 name。 "%" 表示目前的 buffer ,利用 :bufname("%") 便能取出目前正在編輯的檔名。 "#" 表上個編輯的 buffer *執行目前的 buffer 中的 ruby script :map :w :rubyfile %

vim 的 textobject

text object 用來描述某文字區塊,可接在如 y, d 等命令之後。 aw - 包含 cursor 的一段字,有含字的空白 iw - 包含 cursor 的一段字,不含字的空白 at - 包含 cursor 下的 tag 區塊,含 tag 本身。 it - 包含 cursor 下的區塊,不含 tag 本身。 aB - 包含 cursor 下的程式區塊,含區塊分隔符號本身。 iB - 包含 cursor 下的程式區塊,含區塊分隔符號本身。 vim 在程式的移動

vim 在程式的移動

vim 提供一些能方便在程式區塊移動的命令, 這些命令以 [ 開頭的表示到區塊起點, 以 ] 開頭的表示移到區塊終點。 % 對應的括號 [[ 外部區塊起點 ][ 外部區塊終點 [{ 內部區塊起點 ]} 內部區塊終點 [( 括號起點 ]) 括號終點 [/ 註解區塊起點 ]/ 註解區塊終點 [I 列出游標識別字在檔案的所有位置 [ or [ 移至上一個識別字 [i 僅列出全部檔案第一個比對到的識別字,通常可用來找到識別字的定義 ]I 列出所有游標行數後的識別字位置 ]i 列出游標後第一個比對到的識別字 [D 找出全域的 #define gD 移到識別字全域的定義 -- 一定要常用 gd 移到識別字本地的定義 -- 一定要常用 為何不學 vim script

vim:functions

呼叫函數 :call function 定義函數 :function {name}({varlist}) : {body} :endfunction ex. :function min(n1, n2) : if a:n1

vim script 筆記

Vim Script 為一組 Ex 命令 組成 Ex 命令 為 vim 的 normal mode 中,打 ":" 起始的命令 :while 命令 - 迴圈 語法: :while {condition} {statement} :endwhile 資料型態 vim 僅有二種資料型態,數字及字串。 三種數字實字型態 十六進位實字 語法: {hexadecimal literial}=0x[1..9abcdef][0..9abcdef]* 八進位實字 語法: {octal literial}=0[1..7][0..7]* 十進位實字 語法: {decimal literial}=[1..9][0..9]* 注意:前面不可前置 0 這個數字,否則會視為 8 進位 數學運算式 {add}={variable}+{variable} {minus}={variable}-{variable} {multiply}={variable}*{variable} {divide}={variable}/{variable} {modula}={variable}%{variable} 例子: :echo 1*3 3 字串實字 {double-quote-string-literal}="[a..zA..Z0..9]*" 字串相連 {string-concatenate}={string}.{string} ex. :echo "foo"."bar" foobar 變數 :let 命令 - 設值給變數,都是全域變數的 語法: :let {variable}={expression} 例子: :let i=1 :echo "i is" i vim 會印出 i is 1 :let vim 會印出所有的全域變數 變數種類 s:var - 草稿檔變數 {script-local-variable}=s:{variablename} 僅作用於目前的草稿檔, 若用 source 匯入的草稿變數, 雖同名,但有不同的值 {buffer-local-var}=b:{varname} {window-local-var}=w:{varname} {global-var}=g:{varname} {vim...

為何不學 vim script

圖片
想寫一本資料結構的書,書的格式是用 docbook。 在寫這本書時,總想要能夠有一支程式, 能自動幫我產生一些例子,且它的格式要符合 docbook。 像是輸入一陣列,它能自動幫我產生此陣列的反轉表(inversion table), 但是究竟要用何種程式語言寫, 是工作常用且嚴謹的 Java 嗎? 或是寫法多樣且好寫的 Javascript? 但我忘了,我打字的主要工具是 vim? 為何常我要有工具來輔助我打字時,我不學 vim 呢? 現在就開始, vim script 我要挑戰妳!