Ctrl-N Class... (find by name) Ctrl-Shift-N File... (find by name) Ctrl-Shift-Alt-N Symbol... (find by name) Ctrl-G Line... (goto line) Ctrl-H Type hierarchy (hierarchy) Ctrl-Shift-H Method hierarchy (hierarchy) Ctrl-Alt-H Call hierarchy (hierarchy) Ctrl-Q Quick documentation Ctrl-Alt-I Auto-indent lines (indent) Ctrl-Alt-L Reformat code (line up) Ctrl-Alt-O Optimize imports (optimize) Ctrl-/ Comment with line comment (//) Ctrl-Shift-/ Comment with block comment (/*...*/) Ctrl-W Select word or block (word) Ctrl-D Copy line (duplicate line, yyp) Ctrl-X Cut line (dd) Ctrl-U Uppercase/lowercase (upper) Ctrl-J Insert live template Ctrl-Alt-J Surround with live template Ctrl-Alt-T Surround with (template) Ctrl-Shift-J Join lines (join) Ctrl-E Recent files (editions) Ctrl-Shift-E Recently changed files (editions) Alt-Shift-C Recent changes (changes) Ctrl-B Delcaration Ctrl-Shift-B Type declaration Ctrl-Alt-B Implementation(s) Ctrl-P Parameter info (parameter) Ctrl-Space Basic completion Ctrl-Shift-Space Smart completion Ctrl-Alt-Space Completion lookup Alt-Enter Auto-complete Alt-Insert Generate... Ctrl-Shift-Up/Down Move statement up/down Alt-Shift-Up/Down Move line up/down Ctrl-Up/Down Scroll up/down Alt-Up/Down Previous/next method F2 Next highlighted error Shift-F2 Previous highlighted error Ctrl-F Find Ctrl-R Replace F3 Next match Shift-F3 Previous match F4 Jump to source Ctrl-Alt-Shift-T Refactor this F5 Refactor copy F6 Refactor move Ctrl-F6 Refactor change signature Shift-F6 Refactor rename Alt-Delete Refactor safe delete Ctrl-Alt-V Refactor extract variable Ctrl-Alt-F Refactor extract field Ctrl-Alt-P Refactor extract parameter Ctrl-Alt-M Refactor extract method Ctrl-Alt-N Refactor inline
今天帮同事解决一个邮件ؕ码的问题Q简C此?
邮g正文׃贴了Q有一D从上下文判断明昑ֺ该是"上v"Q却昄成了"?.."Q于是自然而然的拿??字和"?字来分析?
通过单的Groovy脚本对这两个汉字分别按gbk和utf-8~码Qƈ得到的byte[]转换成二q制表示输出如下Q?
== ?==
11001001 11001111
11100100 10111000 10001010
== ?==
11100100 10111000
11100110 10110110 10010011
注意"?字的W?排前两组??字第1排的两组byte正好相同Q于是问题迎刃而解Qؕ码是׃邮g以utf-8~码后被错误的以gbk解码Q随后又重新~码成utf-8Q造成的?/p>
关键代码Q?/p>
void showBytes(String input) {
println("== " + input + " ==")
b = input.getBytes("gbk")
b.each { print Integer.toBinaryString(it).substring(24) + ' ' }
println()
b = input.getBytes("utf8")
b.each { print Integer.toBinaryString(it).substring(24) + ' ' }
println()
}
问题起因: 帮同事排查一个SVN资源库导入后无法使用的问题,checkout时报?br/ /> Expected FS format '2'; found format '3'
期待文gpȝ(FS)格式 “2”Q找到格?#8220;3”
熟悉SVN的朋友应该知道,Subversion大版本更新时有可能会对其文g格式q行调整Q因此内部有文g格式版本的说法,以上报错信息在网上搜一下就知道Q版?和版?分别对应Subversion?.4.x?.5.xQ于是问题归lؓ如何l资源库降Q从而得C1.4兼容的dump文g。方法很单,记录如下Q供需要的朋友参?
首先?.5.x的Subversion环境下新Z个与1.4.x兼容的资源库
svnadmin --pre-1.5-compatible create project01
然后之前无法正常导?.4.x的dump文g(dumpfile.old)导入
svnadmin load project01 < dumpfile.old
最后再做一ơ导出即?br/ /> svnadmin dump project01 > dumpfule.new
回到1.4.x的Subversion环境Q新的dump文g(dumpfile.new)可以正常导入和使用了?/p>
设想一下这L场景: 你出差在外,或者生病在Ӟ有个紧急的需求要处理Q涉及到C源代码文件的改动Q你亲自修改需?0分钟Q电话和在公司的同伴沟通然后由?Ҏ修改则需?时。公司svn服务仅支持svn://协议Q且仅限内网讉KQ而你只有一个ssh账号可以q程d到公司某台Linux/UNIX服务器?/p>
你暗自庆q,q好理员有先见之明Qؓ你留了个ssh口子Q这栯你q可以ssh上去通过命o行的方式在服务器上做svn checkoutQvim ...和svn commit。不q如果你认ؓq就是全部,那就太小瞧ssh了?/p>
ssh有个命o行参?-D [地址:]端口Q含义是在某个本地地址的某个端口上开SOCKS服务q行监听Q把q个端口的数据通信以加密Ş式{发到ssh的另一端。你说好Q我有了一个SOCKS服务器,但我又不是要上网C理,svn也ƈ不天然支持SOCKS啊,有什么用? 嗯,q正是tsocks的用武之圎ͼ它能透明的让普通应用程序也走SOCKSQ安装方法很? L的Linux发行版,如Debian、Archlinux{的默认软g仓库已经自带了tsocksQ通常只需要apt-get install或pacman -S卛_QMac OS X下则可以利用MacPorts安装Q然后修攚w|文?etc/tsocks.conf(MacPorts会安装到/opt/local/etc目录)Q可以在h文gtsocks.conf.sample的基上修改,通常只要配置server = 127.0.0.1卛_Q其他都可以默认?/p>
有了q些打底Q剩下的很单了: 首先 ssh -D 1080 -f -N 用户名@公司服务器的公网地址 在本机的1080端口开启SOCKS服务Q然后按照你qx使用svn的习惯,只是在命令前加上tsocksQ类D? tsocks svn up 或?tsocks svn ci -m 'blahblahblah' {等卛_Q本地的svn sandbox不需要Q何修攏V?/p>
q个例子可以说只是冰׃角,不论是sshq是tsocks都还有更高的用法,而这个通道一旦打通,它的效果像是简化版的VPNQ除了ping之类的少数命令外Q几乎就跟你在公司做各种操作没有两样Q所以,发挥你的惌力吧 :)
在Vim中,我们可以通过set fencs=utf-8,gbk告诉它按照先utf-8后gbk的顺序自动识别打开文g的字W编码。Emacs也有一l字W编码相x令,整理如下Q?/p>
指o全名Qset-buffer-file-coding-system
指o作用Q改变当前buffer的编?br />
调用ҎQ?以目标编码gbkZ)
C-x <RET> f gbk <RET>
该指令还可以用于改变当前buffer的换行习?~码参数用dos或unixQ对应\r\n或\n)?/p>
指o全名Quniversal-coding-system-argument
指o作用Q指定紧随其后的命o(如C-x C-f或C-x C-w{?所采用的编?br />
调用ҎQ?以目标编码gbkZ)
C-x <RET> c gbk <RET>
指o全名Qrevert-buffer-with-coding-system
指o作用Q用指定~码重读当前buffer(如果打开时用错了~码)
调用ҎQ?以目标编码gbkZ)
C-x <RET> r gbk <RET>
指o全名Qrecode-region
指o作用Q将以错误编码解码的选区以指定编码重新解?br />
调用ҎQ?以目标编码gbkZ)
M-x recode-region <RET> gbk <RET> utf-8 <RET>
除了q些操作外,q有一U方法,那就是在文g开始的部分l出如下形式的指令,直接告诉~辑器在打开和保存时应采用的~码Q?br />
-*- coding: gbk -*-
接触qPython的同学是不是觉得很眼?
[补充] 查看当前~码选择的命令ؓQ?br />
M-x describe-coding-system <RET> ?C-h C <RET>
也可在回车前输入具体的编码名U?如gbk)以查看详l说明?/p>