android的代码包括JAVA,C,C++和各种脚本,算起来有十几万个文件,阅读,编辑,使用这些代码,需要寻找一款合适的软件才能事倍功半。运行在WINE模式下的source insight工具不仅反应很慢,而且有很多符号在阅读时根本就不会跳转,令人非常困惑。因此我们大部分人只能入乡随俗,要么使用eclipse,要么使用VIM或者EMACS.VIM和EMACS作为linux下的两大编辑神器,对于从WIN转过来的朋友来说,还是比较富有挑战性的,关健在于习惯。他们都能通过命令行和快捷键完成所有工作,而且可以通过插件无限扩展,两者的区别在于,一个更接近DOS,所有操作快捷却对鼠标支持不是很好。一个和WIN比较接近,对鼠标支持比较好。但听说这两大阵营斗的正醋,宛如当年基督教与新教的斗争。也许需要两个都试试才能决定自己加入哪个阵营。在android的develop目录的IDE目录下,可以找到android对一些流行编辑器提供的配置文件。 作为一个典型的WIN用户,其实我们是无法理解这两大神器的。从WIN角度来说,一个好的软件应该需要达到不使用说明书就能操作的地步。但我们的linux同行显然不这么认为,感觉似乎速度,效率,命令的支持才是一个软件的魅力的源泉。所以我们只能入乡随俗,学习一个软件,先读他的说明书,背会他的快捷键和命令行。 确切的说,VIM有三种状态,快捷键状态,命令行状态,编辑状态。通过快捷键ESC切换。但大部分书都会把命令行和快捷键归入一种状态,所以常常说是两种状态,这也不错,快捷键和命令有时确实不太容易分清,一般来说,快捷键不需要回车确认,就会自动执行。 VIM的学习应该分几步,第一步是命令,快捷操作掌握。第二步是使用各种插什,第三步是编写自己工作需要的环境脚本文件.vimrc [plain] view plaincopyprint?跳转,区分大小写,加shift的是大写: 1,上下左右箭头 hkjl上下左右移一个字符 退格,左移一字符 空格,右移一个字符 2.Ctrl-f往下滚动一屏 Ctrl-b往上滚动一屏 3.Ctrl-U往上滚动半屏 Ctrl-D往下滚动半屏 4.Shift+h顶部第一行字符起始,也即大写H Shift+m中间 shift+l底部最后一行起始 5.^,0当前行起始 $,当前行尾 6.~光标上一行首 Enter下一行首 7.[n]G。指定行,500G,到500行 gg 跳到文章开头 shift+g 跳到文章末尾 8.Ctrl-E内容整体上移一行 Ctrl-Y内容整体下移一行 9.(){} 完整句子句首,完整句子句尾,完整段落首位置,完整段落尾位置 插入,记下a,i,使用跳转也行: a,光标之后插数据 A,光标行尾插数据(即shift+a) i,光标之前插数据 I, 光标行首插数据(即shift+I) o.所在行之后 O,所在行之前(即shift+o) 修改替换,记了C或者R,其他也能使用跳转 shift+c 替换从光标开始的字符 cw 替换单字 [n]cc 替换行,n行,n>=1 [n]s shift+s 跳转,区分大小写,加shift的是大写: 1,上下左右箭头 hkjl上下左右移一个字符 退格,左移一字符 空格,右移一个字符 2.Ctrl-f往下滚动一屏 Ctrl-b往上滚动一屏 3.Ctrl-U往上滚动半屏 Ctrl-D往下滚动半屏 4.Shift+h顶部第一行字符起始,也即大写H Shift+m中间 shift+l底部最后一行起始 5.^,0当前行起始 $,当前行尾 6.~光标上一行首 Enter下一行首 7.[n]G。指定行,500G,到500行 gg 跳到文章开头 shift+g 跳到文章末尾 8.Ctrl-E内容整体上移一行 Ctrl-Y内容整体下移一行 9.(){} 完整句子句首,完整句子句尾,完整段落首位置,完整段落尾位置 插入,记下a,i,使用跳转也行: a,光标之后插数据 A,光标行尾插数据(即shift+a) i,光标之前插数据 I, 光标行首插数据(即shift+I) o.所在行之后 O,所在行之前(即shift+o) 修改替换,记了C或者R,其他也能使用跳转 shift+c 替换从光标开始的字符 cw 替换单字 [n]cc 替换行,n行,n>=1 [n]s shift+s[plain] view plaincopyprint?r替换一个 R替换多个 ~转换大小写 撤消 u撤消先前执行的 U撤消全部 删除,记个x,不停的按就行了 [n]x删除当前单个字符 [n]X删除前一个字符 dw [n]dd 删除N行 D删除行尾 复制删除粘贴 yy,Y复制 p光标行下 shift+P光标行上面 r替换一个 R替换多个 ~转换大小写 撤消 u撤消先前执行的 U撤消全部 删除,记个x,不停的按就行了 [n]x删除当前单个字符 [n]X删除前一个字符 dw [n]dd 删除N行 D删除行尾 复制删除粘贴 yy,Y复制 p光标行下 shift+P光标行上面[plain] view plaincopyprint?EX命令,上面的大都是快捷键,下面的大都是命令。 多行复制: :line#1, line#2 co line#3 从某行#1开始到某行#2结束内容复制到某行#3之后 .当前行,$文件结尾 移动: :line#1, line#2 m line#3 从某行#1开始到某行#2结束内容复制到某行#3之后 删除: :line#1, line#2 d 查找: :str 正向查找 :?str 反向查找 n 或者 /从当前位置开始检索下一个,相当于F3 shift+n 或者 ?从当前位置开始反向检索下一个,相当于shift+F3 :/pat/+n 光标移到pat所在行之后第n行 :/pat?+n 光标移到pat所在行之前第n行 模式检索: :/^search 只检索行首位置 :/serch$ 只检索行尾 :/\ 支持通配符.*,[a-z],[dm] 替换字符串: :[g]/search-staring/s//replace-string/[g][c] 如:g/BankA/s//BankB/g 如果需要手动确认,加个C: g/BankA/s//BankB/gc 编辑多个文件: vim file1 file2 合并文件: :line# r filename 把读取的文件插入当前光标位置 删除特殊字符: 1,$ s/^M// VIM里运行shell命令: :!command !!command :sh 如:!adb devices !!adb devices 保存文件退出 :w 写入不退出 :w! 强制写入 :wq  写入退出 :wq! 写入强制退出 ZZ 写入退出,使用shift+两次ZZ :q  退出 :q! 强制退出 EX命令,上面的大都是快捷键,下面的大都是命令。 多行复制: :line#1, line#2 co line#3 从某行#1开始到某行#2结束内容复制到某行#3之后 .当前行,$文件结尾 移动: :line#1, line#2 m line#3 从某行#1开始到某行#2结束内容复制到某行#3之后 删除: :line#1, line#2 d 查找: :str 正向查找 :?str 反向查找 n 或者 /从当前位置开始检索下一个,相当于F3 shift+n 或者 ?从当前位置开始反向检索下一个,相当于shift+F3 :/pat/+n 光标移到pat所在行之后第n行 :/pat?+n 光标移到pat所在行之前第n行 模式检索: :/^search 只检索行首位置 :/serch$ 只检索行尾 :/\ 支持通配符.*,[a-z],[dm] 替换字符串: :[g]/search-staring/s//replace-string/[g][c] 如:g/BankA/s//BankB/g 如果需要手动确认,加个C: g/BankA/s//BankB/gc 编辑多个文件: vim file1 file2 合并文件: :line# r filename 把读取的文件插入当前光标位置 删除特殊字符: 1,$ s/^M// VIM里运行shell命令: :!command !!command :sh 如:!adb devices !!adb devices 保存文件退出 :w 写入不退出 :w! 强制写入 :wq  写入退出 :wq! 写入强制退出 ZZ 写入退出,使用shift+两次ZZ :q  退出 :q! 强制退出