VIM技艺及使用vim开发android应用

VIM技巧及使用vim开发android应用H3 { margin-bottom: 0.21cm }H3.western { font-family: DejaVu Serif

VIM技巧及使用vim开发android应用

vim被vimer称之为编辑器之神,与另一款被emacser称之为编辑器之神的编辑器并称为linux编辑器的泰山北斗。其实习惯了windows操作习惯的人,很难理解linuxer这种对于一个软件近乎狂热的膜拜。我的一个朋友刚刚换到linux下工作时,使用伟大的神器vim编辑一段代码,完了后发现不管怎么搞,都无法保存和退出,也没办法复制粘贴出来,最后只能用鼠标强制关了终端窗口,痛苦万分。然后就十分郁闷的发表了与神器第一次亲密接触后的感觉,他说他实在想不明白linux下的人怎么想的,那些人开发出的件,有些只带一个丑巴巴的界面,有些甚至连界面都没,鼠标也不支持,使用起来要记忆大量的命令,但那些人却爽的不得了,自以为做了一件惊天动地的大事件,到处传诵,奉之为伟大的神器。我猜测这也许是linux下缺少比较成熟完善的IDE开发环境吧。

我接触vim的时间比较短,没有经历过什么大事件,只是为了简单的做android方面的研究和编码。android的代码十分庞大,在eclipse里不仅速度慢,有时还会死掉,这迫使我不得不在linux下寻找更加方便快速的工具。当时可以选择vim和emacs,因为我在android源码目录里发现的emacs的配置文件,所以差一点去学emacs,但后来我在谷歌和百度上分别搜索vim和emacs,搜索的结果vim网页比emacs多好几倍,这使我认识到,也许vim会是个更好的选择,因为有关他的网页比后者多几倍,感觉上也许vimer两样也会比emacser多很多,这通常意味着学习vim要比emacs能获得更多的帮助,后来有一次,我的系统出了问题,无法进入图形界面,查看资料通过vim编辑相应的文件才修复好,其实我不太清楚emacs有没有shell版本,但vim在shell终端为linux保驾护航确实是我对电脑上的资料多了不少安全感,所以我才下定决心来学习vim。

linux下确实缺少像vs和delph那些方法的工具。我不是vimer,只是一个可怜的码农,学习他也不是为了炫耀,更不会拿他来煮咖啡,只为了工作需要。

我习惯上把vim命令或者操作分为浏览,编辑,运行三部分,而vim的操作似乎又可以分为快捷键和命令。vim比其他编辑器好的地方在于,如果你的鼠标坏掉了,你仍然可以坚持用他来完成你的所有工作,曾经在一个论坛上看到一个后进者先大师咨询如何在VIM里使用鼠标复制,大师语重心常的说:孩子,扔掉的鼠标吧。

    浏览移动跳转指令
       (1). h j k l,方向键,记忆技巧:左右方向的是最左边和最右边的,j向下打了个勾,所以是向下键,剩下的k就是向上的键了。
       (2). b, before,上一个单词(词首)
              w, word,下一个单词(词首)
              e,  end,下一个单词(词尾)
       注意这些小写的命令由字母,点,数字,下划线划分,还有这三个对应的大写字母的命令,B,W,E,类似的意思,但是是以空格区分移动的。总而言之,大写的移动范围要大。
       (3). gg 首行
                G 尾行,这两个命令用的较多
       (4). n%  跳到n%的那行
       (5). ^/0  到行首,我有时特别喜欢0,非常清晰简明的命令
             $ 到行尾
       (6). - 非空白行首向上移动
             + 非空白行首向下移动
       (7). 行移动

       nj                     //向下移动n行
       nk                     //向上移动n行
       nh                     //向左移动n列
       nl                     //向有移动n列
       n_                     //向下移动n-1行,并光标移动到非空白行首
       n-                     //向上移动n行,并光标移动到非空白行首

(8)跳到函数开头或结尾:



1:跳到函数头 [{
2:跳到函数尾 ]}

[[
]]
[]
][
{}



(8).通过查找字符移动

fx/Fx                  //向后/前查找字符x,行内跳转很有用
tx/Tx                  //向后/前查找字符x
//fx/Fx和tx/Tx的区别是用f光标停留在x上,用t光标停留在x的前面一个上

;                      //执行上次的fFtT
,                      //反方向执行fFtT,这两个有意思


2.插入,替换,删除
   (1).学会a和i混用,不要只会用i进入插入模式,有时a进入插入模式后更方便,比如插入键盘右边的字母符号,用a的话,左右手配合起来效率更高。
   (2).学会I和A,快速进入行首和行尾插入模式,特定时刻用起来超爽!
这个很好理解,小写的i是光标前,大小的I是整行前面,o/O类似,画面很清晰。
   (3). 学会o和O混用,不要只会用o进入下行编辑:
          (3.1). 进入上行编辑,大写的O更快,而不是ko,双手比单手要快!
          (3.2). 第一行前面想插入一行时,O比其他任何操作更直接和快速(不要先回到开头<+插入模式>+回车)
   (4). r快速替换字符,最大的好处是不需要切换模式,节省了大量时间,非常有用!(R,这个命令我用的少,有的时候用的特别混乱,就不说了)
          s 删除光标后一个字符并进入插入模式。该命令提供了r命令+进入插入模式的快速实现方法。
   (5). c 这个命令很强大,归类说明一下


cm                    //m指的是前面的移动命令,类似的有dm,ym,g?m,gum,gUm
                      //改变内容(m定义了改变范围)并进入插入模式,这里说的改变就是删除,举例说明:
cw                    //删除光标后一个单词并进入插入模式
cl                    //删除光标后一个字母并进入插入模式

    cc和S修改当前行,意思是删除该行所有字符内容,但保留行首空格
              D和C删除该行光标后所有内容,无论字符还是空格,这个命令我用的很多:代码审核格式化代码时,删除空行的空格和行尾空格。

    学会结合t这个命令

t                     //till的意思,这是我最喜欢的命令之一
dt"                   //行内删除直到","不删除
ct)                   //行内改变直到),)不删除


(8).学会x和X混用,分别是向前删除和向后删除字符
(9).:nd 删除第n行

3.查找

#                     //向下一个查找结果
*                     //向下一个查找结果
//在#/*之后按n/N可以重复/反向重复它们的命令

//下面这两个命令在编程时,很有用
gd                    //跳转到光标变量的定义位置(局部变量)
gD                    //跳转到光标变量的定义位置(全局变量)

如要定义了ctag,就可以使用ctrl+t在跳转后返回在到使用的地方

如果你想查查某个字符串在文件中位置,#/*的快捷键能查找光标处的字串,要查找不知道位置的字串,需要命令
:?查找到字符串和:/查找的字符串


    撤销和恢复

    u                     //撤销
    ctrl+ r              //恢复

    滚动

    ctrl+ e/y            //向下/上一行一行的滚动
    ctrl+ d/u            //向下/上半页半页的滚动
    ctrl+ f/b            //向下/上一页一页的滚动


    shift+m 窗口中间一行

    shift+h窗口顶部第一行

    shift+l窗口底部最后一行


    可视模式(选择块)
       可视模式其实非常有用,它的选择很灵活,而且视觉效果上看着和鼠标选择一样,学习成本低,但是功能强大。
       (1). v 进入可视模式
       (2). shift + v 也就是大写的V,可视模式的行选择,整行整行的选择,用于刚好整行或者大篇幅内容的处理比较方便。
    (3).ctrl + v 可视模式的列选择,比行选择模式更加细化,可选择连续的列进入操作
              选择块模式需要和其他命令结合:

    V+ G                 //选择当前行一直到文本结尾
    V+ G + d             //删除当前行一直到文本结尾
    V+ G + y             //复制当前行一直到文本结尾
    V+ gg + d            //删除当前行一直到文本开头
    V+ gg + y            //复制当前行一直到文本开头
    ctrl+v+ <移动>+d      //删除选择的列
    ctrl+v+ <移动>+y      //复制选择的列

    gv选中上次的选中区域
    (5).选中单词,句子,段落:

    vaw                  //选中一个单词(word)
    vas                  //选中一个句子(sentence)
    vap                  //选中一个段落(paragraph)
    viw                  //选中一个单词(word)
    vis                  //选中一个句子(sentence)
    vip                  //选中一个段落(paragraph)

    选中括号:

    vab                  //选择()里面的内容,包括小括号
    vaB                  //选择{}里面的内容,包括大括号


7.执行shell命令

//记住这两种用法,你尝到它们的甜头的
:sh                  //打开shell,可执行shell命令,输入exit退出shell返回到vim
:!cmd                //直接执行shell

当然,这个也可以使用快捷键,用CTRL-Z挂起。这个动作把 Vim停下来,并让你回
到那个你启动Vim的命令 shell里。然后再用 "fg"命令回到 Vim。

当你按 CTRL-Z行不通时,你还可以用命令":suspend"。

    快速选中、删除、复制、修改引号或括号内的内容

    //以下操作一定要熟记,能大大提高你编辑文本的效率
    ci'、ci”、ci(、ci[、ci{、ci<          //分别更改这些配对标点符号中的文本内容
    di'、di”、di(或dib、di[、di{或diB、di< //分别删除这些配对标点符号中的文本内容
    yi'、yi”、yi(、yi[、yi{、yi<          //分别复制这些配对标点符号中的文本内容
    vi'、vi”、vi(、vi[、vi{、vi<          //分别选中这些配对标点符号中的文本内容

    专题二:替换
    查找并替换操作使用的太频繁了,下面针对这个专题从网上或书籍上收集了替换的几个常用的强大用法

    //语法
    /**
     *说明
     *range表示行数,如果是%表示所有行
     *s表示substitution,替换的意思
     *flag表示标志,取值g,i,c等
     *g表示global,全部
     *i表示ignore,忽略大小写
     *c表示confirm,一个一个交互确认替换
     *count表示从当前行到接下来的第几行,表示范围
     */
    :[range]s/{pattern}/{string}/[flag][count]


(1).全部替换
参数g实现全部替换,否则只替换一个
(1).全部替换
参数g实现全部替换,否则只替换一个

:%s/{old-pattern}/new-text/g

(2).行内替换
%代表所有行,去掉%表示当前行,只替换当前行

:s/{old-pattern}/new-text/g

(3).指定行范围替换
对1到10行的结果替换

:1,10s/{old-pattern}/new-text/g

(4).可视模式替换
如果你觉得数行数比较麻烦,可以使用可视模式,首先进入可视模式,然后选择行
列,最后输入:自动进入:'<,'>
后面加上s/{old-pattern}/new-text/g,则只替换选择区域的结果

:'<,'>s/{old-pattern}/new-text/g

(5).整词替换,而不是部分匹配的单词
对单词匹配模式外包一个<和>

:s/\<blog\>/weibo/g //替换blog,但是cnblog,blogs则不会替换

(6).多项替换
同时对多个匹配都替换成某一字符串

:%s/\(good\|nice\)/awesome/g //good和nice都将被替换成awesome

    确认式替换
    参数c让替换进行交互请求,需要你选择y,n,a,l,q

    /**
     *选择说明:
     *y 替换且跳转到下一个匹配结果
     *n 不替换且跳转到下一个匹配结果
     *a 替换所有并退出交互模式
     *l 替换当前并退出交互模式

    *q 退出交互模式
     */
    :s/{old-pattern}/new-text/gc


(8).行首插入行号
把行首^替换成行号,可自定义具体形式
:%s/^/\=line(".")/g

    大小写转换
       讲这个,主要是觉得这个问题挺有意思的。

    ~                   //改变当前字符并自动切换到下一个字符,大写变小写,小写变大写,可以一直按
    gum                  //转化为小写,m指移动命令,如:
                         //guw   光标后的一个单词小写化
                         //guG   光标所在行到最后行全部小写化
                         //gut=  光标后直到=之间的字符小写化
                         //罗嗦一句,gu还可以与可视模式结合,小写化所选区域
    gUm                  //转化为大写,用法同上

    录制
       这个其实很简单,但也是很强大的功能,单独柃出来说一下。

    //为操作定义宏或者取别名
    //这个命令的强大之处在于使重复复杂指令的简单化了
    q                    //按下q开始录制
    x                    //x是这个录制的寄存器,x可以是其它字符
    dd                   //删除当前行,这个操作可以自定义其他复杂的操作
    q                    //录制结束,现在dd这个操作被定义到了@x这个命令里了


    数字增减
       这个小技巧还挺有用的,比如说定义了一系列staticfinal变量,而且时不时要中间插入一些新的变量,这些值一般都是递增的,这时候这个技巧绝对比数字替换要方便。

    //Normal模式下执行
    Ctrl+ a          //自增1
    Ctrl+ x          //自减1

vim支持运行外部命令和shell,托android的福,借助anroidsdk提供的开发套件,我们通过vim的强大扩展和支持,可以很轻松的使用vim开发android应用,虽然没eclipse能使用直观的鼠标操作,但在一些老爷机上,借助命令和vim,仍然可以快捷的andorid应用开发,还是不错的,而且如果机器还没有来得及安装ide,也能做一些开发。

1.生成android工程

Androidcreate project -n test –activity demo –packagecn.forwind.myproject –target 3 –path ./myproject

2.创建配置文件

ProjectCreate./myproject -n java

3.创建模拟器

Androidcreate avd -n forwind.cn

4打开vim,执行命令

:ProjectList

命令,确认一下,myproject这个project是被认出来了的。好,我们现在试着运行

:ProjectTreemyproject
5.运用vim技巧修改完成了,就可以编绎了,如果工程同样使用了NDK技术,需要先进入jni目录执行一下ndk-build来生成so文件,如果出错了,可以使用ndk-build NDK_LOG=1 来查看出错的提示并修改。

6。如没有NDK技术,可以直接使用如下命令创建build.xml文件,

androidupdate project --target 3 -p . -s



7。然后使用如下命令生成apk应用

antdebug或者antrelease

8.可以启动模拟器,然后使用adbpush或者adbinstall来安装这个应用
emulator-avn AVD_NAME



.

参考文档:





http://www.jb51.net/article/36195.htm

http://blog.chinaunix.net/uid-9789774-id-3067684.html

http://blog.csdn.net/huiguixian/article/details/6231425



http://blog.csdn.net/dadoneo/article/details/6044058