根據小道消息(有人告訴我)
bash 中也有 vi
就是使用 set -o vi
這時候就可以開始使用 vi 模式
一開始會是 Insert Mode
當按下 Esc 後會進入 Command Mode
hjkl 左下上右
hl 會在目前的指令前後移動
jk 會在 history 前後項移動
另外像是 /? 可以搜尋啟動 vi 模式後所打過的指令
還有 x,X 可以刪除字元
dd 可以整行刪除
0 可以移到指令"前頭"
^ 可以移到指令"開頭"
$ 可以移到指令結尾
W,w,B,b,E,e 可以在單字間移動
v 會進入真正的 vi 介面
A,I,a,i 進入 Insert Mode
... 繁多不即備載
有興趣的朋友可以自己研究研究... ^_^
最後...
set -o 或是 set +o 可以看到其它可以玩弄的選項
所以想要離開 vi 模式就可以執行 set +o vi
不過這時候會覺得使用上會有點奇怪
像是上下鍵的 history 不見了
原來 bash 的預設值是設定成 emacs 模式
所以只要再執行 set -o emacs 就回復到原本的 bash 了
以上的操作是在 Fedora Core 6 上所觀察到的
其它的系統可能功能上稍有出入
GNU/Linux, Debian/Ubuntu, Mac OS X, Free Software/Open Source Software, Freeware, and Programming.
2007年3月22日 星期四
2007年3月20日 星期二
Google 網上論壇 - 直譯式語言使用者社群大亂鬥
最近在 Google 網上論壇 亂逛了一下
找到了
perl@taiwan
python. tw
PHP 台灣
台灣Ruby使用者群組
其中以 Python 以及 Ruby 的台灣使用者群組較為活躍許多 (以 Google 網上論壇為參考範圍)
直譯式語言的四大天王~~~ ^_^
找到了
perl@taiwan
python. tw
PHP 台灣
台灣Ruby使用者群組
其中以 Python 以及 Ruby 的台灣使用者群組較為活躍許多 (以 Google 網上論壇為參考範圍)
直譯式語言的四大天王~~~ ^_^
2007年3月14日 星期三
極簡風格的 Window Manager - wmii
http://www.suckless.org/wiki/wmii
Alt + d 標準模式 (水平視窗分割)
Alt + s 堆疊模式
Alt + m 最大化模式
Alt + Shift + l 垂直視窗分割
Alt + hjkl 控制視窗移動
Alt + Enter 叫出終端機
Alt + p 程式隨打執行
類似 MacOSX 上的 QuickSilver
Alt + a 主選單
只有四個選項, 也許可以再自訂
Alt + Shift + [0-9] 將目前的視窗搬到 Workspace [0-9]
Alt + [0-9] 切換 Workspace 到 [0-9]
這不就是我夢想中的桌面嗎!?
整個就是有效率啊~~~ 喔齁齁~~~ ^o^
--
不過在 Ubuntu 6.10 上的 wmii 中的中文顯示有點問題... :(
Alt + d 標準模式 (水平視窗分割)
Alt + s 堆疊模式
Alt + m 最大化模式
Alt + Shift + l 垂直視窗分割
Alt + hjkl 控制視窗移動
Alt + Enter 叫出終端機
Alt + p 程式隨打執行
類似 MacOSX 上的 QuickSilver
Alt + a 主選單
只有四個選項, 也許可以再自訂
Alt + Shift + [0-9] 將目前的視窗搬到 Workspace [0-9]
Alt + [0-9] 切換 Workspace 到 [0-9]
這不就是我夢想中的桌面嗎!?
整個就是有效率啊~~~ 喔齁齁~~~ ^o^
--
不過在 Ubuntu 6.10 上的 wmii 中的中文顯示有點問題... :(
2007年3月13日 星期二
fc6 upgrade trac to 0.10.3.1 broken
升級了在 Fedora Core 6 上裝的 trac
結果發現到 trac 整個爛掉
去 http://bugzilla.redhat.com/bugzilla 找了一下
結果找到了這篇 http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=231836
總之... 暫時的解法就是
結果發現到 trac 整個爛掉
去 http://bugzilla.redhat.com/bugzilla 找了一下
結果找到了這篇 http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=231836
總之... 暫時的解法就是
# rpm -e --nodeps python-sqlite2
vim :TOhtml
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Hello World!\n");
return 0;
}
喔~ 效果還不錯喔~ ^_^
2007年3月12日 星期一
Blogger Help : Can I get site feeds for specific labels?
哇喔~ 原來 Blogger 有提供依照 Label 來產生不同的 Feed 啊! :|
Template:
http://blogname.blogspot.com/feeds/posts/default/-/labelname
如果想要做出 Linux 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Linux
如果想要做出 Debian 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Debian
如果想要做出 Ubuntu 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Ubuntu
如果想要做出 Fedora 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Fedora
如果想要做出 Mac 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Mac
如果想要做出 Windows 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Windows
應該可以利用這種方式來加入各種不同類型的 Planet 吧~
也比較容易保持 Planet 的一致性
讓 Planet 上面的文章更符合該 Planet 的主題
不過也同時排除了接觸其他知識的機會... :P
P.S. 大小寫有分喔~ :o
Template:
http://blogname.blogspot.com/feeds/posts/default/-/labelname
如果想要做出 Linux 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Linux
如果想要做出 Debian 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Debian
如果想要做出 Ubuntu 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Ubuntu
如果想要做出 Fedora 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Fedora
如果想要做出 Mac 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Mac
如果想要做出 Windows 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Windows
應該可以利用這種方式來加入各種不同類型的 Planet 吧~
也比較容易保持 Planet 的一致性
讓 Planet 上面的文章更符合該 Planet 的主題
不過也同時排除了接觸其他知識的機會... :P
P.S. 大小寫有分喔~ :o
2007年3月9日 星期五
FreeNode 要如何設定 Channel 的 OP
可以先參考 Canydz 寫的這篇 還有我以前寫的那篇
如果是要註冊一個 Channel 的話,必須先註冊一個帳號才能註冊 Channel
帳號有帳號本身的密碼
Channel 有 Channel 本身的密碼
也就是說想要設定 Channel 的 OP 的話
要先經過 Channel 密碼的認證
--
另外... 要特別感謝 Mat0220 不厭其煩地幫忙我做些實驗.... ^_^
如果是要註冊一個 Channel 的話,必須先註冊一個帳號才能註冊 Channel
帳號有帳號本身的密碼
Channel 有 Channel 本身的密碼
也就是說想要設定 Channel 的 OP 的話
要先經過 Channel 密碼的認證
/msg ChanServ IDENTIFY #ChatRoom [ChatRoom's Password]這樣才能把我設定成 OP
/msg ChanServ ACCESS #ChatRoom add FourDollars 30
--
另外... 要特別感謝 Mat0220 不厭其煩地幫忙我做些實驗.... ^_^
2007年3月8日 星期四
CMClass: 微軟徵才試題 (完)
算錯篇: http://fourdollars.blogspot.com/2007/03/cmclass.html
算對篇: http://fourdollars.blogspot.com/2007/03/cmclass_08.html
這篇要來個總結... :P
原始的題目是
http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/226
http://hoamon.blogspot.com/2007/03/cmclass.html
總算是想出來了... ^o^
Source Code 放在 http://fd.idv.tw/tux/CMClass.tar.bz2
因為不知道 C 上面有什麼 Set 的相關函式, 所以就自己硬幹一個簡易版出來... XD
另外... 為了把 Source Code 貼到 Blog 上, 用到了一段 command
算對篇: http://fourdollars.blogspot.com/2007/03/cmclass_08.html
這篇要來個總結... :P
原始的題目是
永源拿了兩個不同數字...
這兩個數字分別大於 1 ,也分別小於 50
永源只把這兩個數字的乘積告訴了亞譚 ...
永源再只把這兩個數字的和告訴了明歆 ...
永源問, 這兩個數字是什麼 ?
以下是亞譚和明歆的對話... (小強, 小毛, 小燕在旁坐陪)
亞譚: 我不知道這兩個數字是什麼!
明歆: 但我也還是不知道這兩個數字是什麼!
亞譚: 喔!那我知道那兩個數字是什麼了 !
明歆: 喔!那我也知道那兩個數字是什麼了 !
突然間 ....聰明的三位陪客同時也說: 我們也知道那兩個數字是什麼了 !
聰明的你, 告訴我....那兩個數字是什麼 ?
#include <stdio.h>兩篇相關的討論
#include <stdlib.h>
#include <string.h>
#include "set.h"
#define LOWER 2
#define UPPER 49
#define for_ij_do(A...) \
for (i = LOWER; i <= UPPER - 1; i++) \
for (j = i + 1; j <= UPPER; j++) \
do { A } while (0);
int main(int argc, char *argv[])
{
int i,j;
int m[UPPER * UPPER] = {0};
int a[UPPER + UPPER] = {0};
Set *setA = newSet();
Set *setB = newSet();
for_ij_do (
m[i * j]++;
);
for_ij_do (
if (m[i * j] >= 2)
appendSet(setA, newPair(i, j));
);
/* 亞譚: 我不知道這兩個數字是什麼!*/
/* setA->size == 638 */
for_ij_do (
if (findElement(setA, newPair(i, j)))
a[i + j]++;
);
for_ij_do (
if (a[i + j] >= 2 && findElement(setA, newPair(i, j)))
appendSet(setB, newPair(i, j));
);
/* 明歆: 但我也還是不知道這兩個數字是什麼!*/
/* setB->size == 629 */
memset(m, 0, sizeof(int) * UPPER * UPPER);
for_ij_do (
if (findElement(setB, newPair(i, j)))
m[i * j]++;
);
for_ij_do (
if (m[i * j] == 1 && findElement(setB, newPair(i, j)))
printf("%d %d\n", i, j);
);
/* 亞譚: 喔!那我知道那兩個數字是什麼了! */
/* 明歆: 喔!那我也知道那兩個數字是什麼了! */
destorySet(setB);
destorySet(setA);
return 0;
}
http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/226
http://hoamon.blogspot.com/2007/03/cmclass.html
總算是想出來了... ^o^
Source Code 放在 http://fd.idv.tw/tux/CMClass.tar.bz2
因為不知道 C 上面有什麼 Set 的相關函式, 所以就自己硬幹一個簡易版出來... XD
另外... 為了把 Source Code 貼到 Blog 上, 用到了一段 command
cat main.c | sed -e 's/</\</g' | sed -e 's/>/\>/' | less如果有程式有辦法把 Source Code 轉成 HTML 外加彩色應該會很方便好用吧!?
CMClass: 微軟徵才試題 (續)
昨天的文章算錯答案了... :P
所以... 重寫一個程式... ^o^
有興趣可以幫忙 debug ... :P
所以... 重寫一個程式... ^o^
#include <stdio.h>完整的 Source Code 在 http://fd.idv.tw/tux/CMClass.tar.bz2
#include <stdlib.h>
#include <string.h>
#include "set.h"
#define LOWER 2
#define UPPER 49
int main(int argc, char *argv[])
{
int i,j;
int m[UPPER * UPPER] = {0};
int a[UPPER + UPPER] = {0};
Set *setA = newSet();
Set *setB = newSet();
Set *setC = newSet();
Node *index = NULL;
for (i = LOWER; i <= UPPER - 1; i++)
for (j = i + 1; j <= UPPER; j++) {
m[i * j]++;
a[i + j]++;
}
for (i = LOWER; i <= UPPER - 1; i++)
for (j = i + 1; j <= UPPER; j++)
if (m[i * j] >= 2)
appendSet(setA, newPair(i, j));
memset(m, 0, sizeof(int) * UPPER * UPPER);
memset(a, 0, sizeof(int) * UPPER * 2);
for (i = LOWER; i <= UPPER - 1; i++)
for (j = i + 1; j <= UPPER; j++)
if (findElement(setA, newPair(i, j))) {
m[i * j]++;
a[i + j]++;
}
for (i = LOWER; i <= UPPER - 1; i++)
for (j = i + 1; j <= UPPER; j++)
if (a[i + j] >= 2 && findElement(setA, newPair(i, j)))
appendSet(setB, newPair(i, j));
memset(m, 0, sizeof(int) * UPPER * UPPER);
memset(a, 0, sizeof(int) * UPPER * 2);
for (i = LOWER; i <= UPPER - 1; i++)
for (j = i + 1; j <= UPPER; j++)
if (findElement(setB, newPair(i, j))) {
m[i * j]++;
a[i + j]++;
}
for (i = LOWER; i <= UPPER - 1; i++)
for (j = i + 1; j <= UPPER; j++)
if (m[i * j] == 1 && findElement(setB, newPair(i, j)))
appendSet(setC, newPair(i, j));
for (index = setC->head; index != NULL; index = index->next)
printf("%d %d\n", index->curr->x, index->curr->y);
destorySet(setA);
destorySet(setB);
destorySet(setC);
return 0;
}
有興趣可以幫忙 debug ... :P
2007年3月7日 星期三
CMClass: 微軟徵才試題
從 http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/226 看到的題目
我的解答是 3 跟 4 (這不是正確答案喔!請看意見)
求解的程式在這裡
從以前就很喜歡寫程式來解數學問題... ^_^
我的解答是 3 跟 4 (這不是正確答案喔!請看意見)
求解的程式在這裡
#include <stdio.h>
int main(int argc, char *argv[])
{
int i, j;
int a[100] = {0};
int m[2500] = {0};
for (i = 2; i < 50; i++) {
for (j = i; j < 50; j++) {
a[i+j]++;
m[i*j]++;
}
}
for (i = 2; i < 50; i++) {
for (j = i; j < 50; j++) {
if (a[i+j] == 2 && m[i*j] == 2) printf("%d %d\n", i, j);
}
}
return 0;
}
從以前就很喜歡寫程式來解數學問題... ^_^
訂閱:
文章 (Atom)