2015年10月10日星期六

【vim环境配置】详细实录 - 承续缘

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
【vim环境配置】详细实录 - 承续缘  阅读原文»

【写在前面】

  以下的所有内容主要参照:

  https://github.com/yangyangwithgnu/use_vim_as_ide

  原blog作者写的非常用心,建议大家都去看看。(个人觉得通过这个blog大大提升了学习vim配置环境的效率,因此给作者捐了顿外卖的钱这个随笔就是学习上述blog内容的辅助记录,并不能代替学习原著;把学习过程中遇到的一些坑列出来,初步做一下知识沉淀

  以前我个人的学习理念是“重剑无锋、大巧不工”,瞧不上这些快捷键之类的“奇技淫巧”。但是,打磨完了vim的开发环境后,我改变了这个看法:知识可以厚,但是顺手的工具必须要用心去一点点儿打磨锋利,提高工作效率的‘量变’会带来能力水平的‘质变’。

  另,本人纯vim初学者,因此学习过程中肯定存在吃不透甚至错误的地方。一方面后续会自我不断改进,另一方面也非常欢迎大家拍砖指点。

【系统环境 & 内容提纲】

我用操作系统环境:

  mac OS X Yosemite 10.10.3

脚本环境用的zsh:

  

搭建完成后的编辑环境如下:

  

  可以看到:标签(函数变量)、工程目录、自动补全、状态栏提示、语法分析错误提示都集成在了里面。在实现了一个IDE的主要功能同时,VIM还可以让你最大程度自由定制个人的开发环境,快捷键等等。

全文的提纲汇总如下:

(一)重新编译安装vim7.4

(二)编辑界面显示美化插件

(三)安装pathogen插件管理工具

(四)语法高亮、代码缩进、代码折叠、强命名下的接口与实现快速切换

(五)基于标签的代码导航

(六)内容查找、内容替换、批量注释

(七)代码模板

(八)代码自动补全

(九)工程文件浏览 & 多文档编辑

(十)静态语法分析器

(十一)快速移动功能

下面对上述十一块内容逐一说明,各个部分有前后逻辑限制,改变顺序不保证每个功能都能实现正确

【步入正题】

(一)重新编译安装vim7.4

我的mac上自带的vim版本是7.3,但有个极其重要的自动补全插件YouCompletetMe需要的vim版本是7.4,因此必须再装一套高版本vim。

vim7.4压缩包地址:ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2

基本上按照blog中步骤执行如下命令(假设上述文件解压到了~/Download/vim74中):

cd ~/Downloads/vim74
.
/configure --with-features=huge --enable-rubyinterp --enable-pythoninterp --with-python-config-dir=/usr/lib/python2.7/config/ --enable-perlinterp --enable-gui=gtk2 --enable-cscope --prefix=/usr --enable-luainterp
make

报错:

简单分析一下error,应该是命名冲突了。google了http://zhouyichu.com/vim/Vim-in-Mac.html

解决方案是在vim74/src/os_unix.h中加入#include <AvailabilityMacros.h>。Done。

再执行

sudo make install

输入root密码后,Done。

再输入vim,版本就升级到7.4了

===================================================================

注意./configure的参数中

--prefix=/usr

是vim安装路径的,如果不想替换系统原有的,就可以把vim安装到自定义的路径下。再使用alias命令,在.bashrc中加一句

  alias vi="vim安装路径/vim"。

再注意,如果你跟我一样用了zsh这类的bash加强版,就需要在~/.zshrc中再加一句 source ~/.bashrc,如下图

这样你每次输入vi启动的才是vim7.4,否则zsh还是会默认调用原来系统自定义的vim。

===================================================================

另外,要想成功编译安装vim,还需要python-devel、python3-devel、ruby-devel、libX11-devel、gtk-devel、gtk2-devel、gtk3-devel、ncurses-devel等支持。(我在服务器端安装的时候,就遇到了ncurses没有的情况,这个后续再去解决)

(二)编辑界面显示美化插件

由于pathogen无法管理界面美化插件,因此界面美化单独拎出来

1. 界面配色

(1)建立.vim/colors/文件夹,并将三个配色的vim文件copy到.vim/colors/文件夹下面,如下图所示

  

(2).vimrc增加配置,使界面美化生效

  在.vimrc中添加的命令如下

" 配色方案
set background=dark
"colorscheme solarized
colorscheme molokai
"colorscheme phd

  仅仅这样还不够,此时vim的编辑环境还是黑白的,还要让vim开启语法高亮并且能够应用配色文件。需要继续在.vimrc中添加下面的配置;

syntax enable
syntax on

  这样,再次打开vim的编辑环境,语法高亮配色就体现出来了:

  

2. 添加辅助信息

  为了防止编程过程中串行了,在设置一些辅助信息如下:

" 总是显示状态栏
set laststatus=2
" 显示光标当前位置
set ruler
" 开启行号显示
set number
" 高亮显示当前行/列
set cursorline
set cursorcolumn
" 高亮显示搜索结果
set hlsearch" 禁止折行
set nowrap

  添加了这些信息后,可以看到vim编辑界面如下(光标、高亮、行号、状态栏都有了):

 

经过上述的配置,现在vim的编辑环境有了颜色,有了行号。但仅仅是一个带语法颜色提示的txt,其他强大的功能还要借助于各种插件。

要想管理好各类插件,就要使用下面一节介绍的pathogen插件管理工具。

(三)安装pathogen插件管理工具

用pathogen来管理vim插件的特色是:.vim/bundle/下每个插件有独立的文件夹,插件之间几乎是完全解耦。

这样带来的好处是:在添加、删除某个插件时,几乎不影响其他的插件。

1. 安装pathogen

pathogen虽说是管理vim插件的,但是它自身就是一个插件。安装过程如下。

(1)在~/.vim路径下执行如下命令

  

(2)下载pathogen.vim到autoload

https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim

执行如下命令:

curl -o pathogen.vim https://raw.githubusercontent.com/tpope/vim-pathogen/master/autoload/pathogen.vim

如下:

  

(3)在.vimrc中增加配置信息

一是告诉vim,pathogen在哪;二是告诉vim执行path

用TTL线在CFE环境下拯救半砖wrt54g路由器 - ccpaging  阅读原文»

缘起:路由器被刷成半砖

Linksys wrt54gs v4路由器,已刷入 tomato-dualwlan 1.23。使用数年,未出现任何故障。

在日用的wifi网络上,通过web界面刷入了错误的tomato-dualwlan的 R2 firmware。

路由器毫无意外地挂了。后查资料得知,以上的每一步都有风险,选错firmware则是致命的。

正确的刷机过程是:

  1. 路由器和刷机用的计算机脱离日用网络。用一根网线(有线而不是无线)链接路由器和计算机,组成一个干净的微型网络。

  2. 计算机上设置固定的ip地址。

  3. 刷机前进入路由器配置界面恢复缺省值。

  4. 仔细查看资料,确认正确的固件。如有任何疑问,放弃是理性的选择。

  5. 选择头脑清醒的时间,在适合工作的场所,跟懂技术的朋友交流讨论,不要喝酒……

唯一的好消息是路由器处于半砖状态。所谓半砖是指路由器的CFE(相当于计算机的BIOS)工作正常。
CFE只能通过JTAG刷,不用JTAG就刷不坏(其实用TTL线也可以更新CFE,这是后话)。

也就是说,此时的路由器相当于一台没有接显示器和键盘,有硬盘(flash芯片),
但操作系统已经不能正常工作的计算机。

devices

故障现象

插入电源后,全部灯亮,迅速熄灭,仅留下插网线的端口所对应的灯亮。

用计算机 ping 不通。该计算机已设置为:

地址:192.168.1.106
子网:255.255.255.0
网关:192.168.1.1

tftp刷机失败

既然无法 ping 通,说明计算机无法与路由器建立TCP连接,那么,web界面肯定用不了。

下一步只能尝试tftp刷机。tftp ,顾名思义是基于网络ftp的协议。理论上有两种方式上传新的 firmware 固件:

  1. 路由器开tftp服务程序,操作计算机运行tftp客户端上传文件。

  2. 计算机开tftp服务程序,操作路由器运行tftp客户端从服务器上读取软件。

以上任何一种方式都需要 ping 通计算机,于是问题又回到起点。

经过查资料和实测可以用短路法,即将路由器的flash芯片(mx29lv320)的16、17脚短接,使路由器进入safe mode,恢复ping,同时打开tftp服务,使用上述第1种方式从计算机上传新的固件到路由器。

又据网络资料称,正常情况下路由器上电后启动运行CFE,然后进入linux操作系统,期间有0-1秒的时间运行了tftp服务程序,此时可以用计算机上传固件。

于是为了这个0-1秒的时间,我们使用了各种奇怪而扭曲的操作方案。

我设置计算机的网络链接。打开 CMD 窗口,执行ping命令:

ping 192.168.1.1 -t

计算机上安装的是windows 2008,缺省未安装tftp,需要增加新功能……熟悉tftp命令……另开一个 CMD 窗口输入tftp命令:

tftp -t -i 192.168.11.1 put xxx.bin

旋转计算机屏幕以利于观察何时接通。

硬件攻城狮用镊子短接flash 芯片的16、17脚.

软件攻城狮(我)插上电源,观察屏幕。在 ping 通1秒以内,按下回车键。

tftp命令的结果有两个:

  1. Invalid code partern

  2. Timeout

根据网路上的案例,前者是文件头不对,后者是tcp链接失败。

于是,在网络上搜索各种固件。固件的文件头有两个:

  1. W54S

    WRT54GS-v4_1.06.3.002_fw.bin
    WRT54GV4.0_4.20.9_SC_code.bin
    FreemanBasic_V1.0.2_wrt54gs.bin
    tomato_dual_1.23\Firmware\WRT54GSv4.bin
    dd-wrt.v24_mini_wrt54gs.bin
  2. HDR0

    Tomato-1.28.2890-R1-4M.trx

然现在的问题并没有那么简单。路由器原来用的是tomato_dual_1.23\Firmware\WRT54GSv4.bin,刷的是Tomato-1.28.2890-R1-4M.trx,那么问题来了,路由器里边是1.23还是1.28的文件头呢?

操作结果是两种文件头都试过了,都没有成功。

分析问题,提出新的技术方案

经过多次刷机失败以后,攻城狮们放弃了……坐下来认真分析。

  1. 路由器上电后,网络链接并未建立。在 Linux 中这通常意味着驱动出错,或者网络被关闭。

  2. 无法确认tftp服务程序是否开通过,何时开通。

此路不通……必须另外设想其它的方案。可选的有TTL刷机,JTAG刷机。

TTL接口其实是串行端口。对软件攻城狮来说就是类似com1―9600速率―N81的东西。对硬件攻城狮来说就是RX接收,TX发送,GND地三条线,±12V。只不过由于终端设备的电源供电通常为0~3.3/5V,因此对数据0和1的高低电平、临界值进行了调整,接计算机时需要升压电路。

串行端口在终端上通常具有多重功能,显示信息(串行终端,在unix系统上常见),输入命令,传递数据。它是类似路由器这样的设备的显示接口键盘接口和数据接口。

JTAG是并行接口。对软件攻城狮来说就是类似ltp1的东西。对硬件攻城狮来说就是25pin,多条数据线,控制线和地,0~5V电平,多用于数据输出接打印机扫描仪等,数据传输速率高。

因此,使用TTL接口时,路由器被视为主机,计算机则是作为提供输入输出的显示器和键盘的外围设备。使用JTAG接口时,计算机是主机,路由器是被控制的外围设备。

最后,我们选择的是TTL接口。硬件攻城狮首先在路由器的TTL接口(和JTAG接口)上焊接了双排插针。

选购USB-TTL刷机线,建立调试环境

熟悉TTL接口的知识以后,下一步就是上某宝购买TTL接口线。我们公司一直在某宝上购买硬件设备,尤其是这类小接口。一般来说,不要选最便宜的,如果一个芯片10元左右,你要是买个10元左右的板子……只能祝福您了,相信您能从中学到很多经验和知识,呵呵。

六合一多功能串口模块CP2102

收到模块后,仔细阅读说明书,安装USB驱动。将USB插入计算机,在系统中查看USB串口的端口号,一般是COM3。

com3

下载并运行串行通讯软件。我选用的是putty。SecureCRT也可以,但这是付费软件。实际上windows的超级终端也可以。

putty-com3

putty-com3

设置端口为Serial COM3,速率为115200,N81。速率如果设置错了,收到的信息显示为乱码,试试改成9600/14400/57600等。

wrt54g的TTL串口插座

wrt54g有两个TTLL串口,分别为:

  • 串口1, uart0,pin 4/6/10

  • 串口2, uart1,pin 3/5/9

我的路由器上用的是串口1。用杜邦线连接串口模块和wrt54g上对应的双排插针。注意不要连接到3.3v/5v的电源脚。

路由器上电,在USB-TTL转换板上能看到RX灯闪烁,putty的窗口上显示接收到的数据。若无反应,拔掉路由器电源,换一个路由器串口重新接线试试。

再次拔掉/插入路由器电源,注意观察putty窗口上显示的数据。

wrt54g是一台嵌入式的Linux主机

此时感觉就很不一样了!wrt54g不再只是一个黑匣子,而是一台"主机",透过运行在计算机上的putty和TTL连线,我们有了"显示器","键盘",它还有操作系统――Linux,硬盘――Flash芯片,文件系统,串口,网卡等等。

路由器上电以后首先启动CFE(Common Firmware Environment),然后启动Linux操作系统。

CFE相当于计算机上用的ntldr,grub for dos,common.com,是路由器的Boot loader。以下为CFE的刷屏:

CFE version 1.0.37 for BCM947XX (32bit,SP,LE)
Build Date: Tue Aug 7 17:14:08 CST 2007 (crazy@sw1.rd)
Copyright (C) 2000,2001,2002,2003 Broadcom Corporation.

Initializing Arena
Initializing Devices.

No DPN
et0: Broadcom BCM47xx 10/100 Mbps Ethernet Controller 3.90.37.0
CPU type 0x29008: 200MHz
Total memory: 16384 KBytes

Total memory used by CFE: 0x80300000 - 0x803A39B0 (670128)
Initialized Data: 0x803398C0 - 0x8033BFD0 (10000)
BSS Area: 0x8033BFD0 - 0x8033D9B0 (6624)
Local Heap: 0x8033D9B0 - 0x803A19B0 (409600)
Stack Area: 0x803A19B0 - 0x803A39B0 (8192)
Text (code) segment: 0x80300000 - 0x803398C0 (235712)
Boot area (physical): 0x003A4000 - 0x003E4000
Relocation Factor: I:00000000 - D:00000000

Boot version: v3.7
The boot is CFE

mac_init(): Find mac [00:06:25:00:02:DB] in location 0
Nothing...

No eou key find
Device eth0: hwaddr 00-06-25-00-02-DB, ipaddr 192.168.1.1, mask 255.255.255.0
gateway not set, nameserver not set
Loader:raw Filesys:raw Dev:flash0.os File: Options:(null)
Loading: .. 5192 bytes read
Entry at 0x80001000
Closing network.
Starting program at 0x80001000

显然,半砖路由器的CFE启动正常,运行Linux(Starting program at 0x80001000)即挂死。


短接Flash芯片的16、17脚导致CFE读取Linux的image文件异常,不停地显示:

Reading :: Failed.: Timeout occured

路由器被停在了CFE中。如果CFE中有tftp服务程序,高版本的CFE还有web服务程序,那么,您此时可以在计算机上用tftp刷机或者用浏览器刷机。

但说好的tftp和web在这台路由器的CFE中――并不存在,CFE版本low至3.7。二位攻城狮以各种时间序列凹出各种造型,然都没有用

好消息是CFE打开了网络口,正常,直到退出CFE。在计算机侧输入命令:

pint 192.168.1.1 -t

是成功。

玩不坏的 CFE

拔掉路由器电源。

在计算机上激活putty终端窗口,左手放在键盘的Ctrl C上。

右手插入路由器电源,电源接通后,左手立刻按下Ctrl C

――中断CFE的自动运行命令,进入CFE命令环境。

putty上显示:

No eou key find
Device eth0: hwaddr 00-06-25-00-02-DB, ipaddr 192.168.1.1, mask 255.255.255.0
gateway not set, nameserver not set
Automatic startup canceled via Ctrl-C
CFE> ^C
CFE> ^C
CFE>
  • ^C,就是我们在计算机上按Ctrl C

此即进入 CFE 命令模式。在计算机键盘输入help,回车:

CFE> help
Available commands:

rndis Broadcom USB RNDIS utility.
et Broadcom Ethernet utility.
modify Modify flash data.
nvram NVRAM utility.
reboot Reboot.
flash Update a flash memory device
memtest Test memory.
f Fill contents of memory.
e Modify contents of memory.
d Dump memory.
u Disassemble instructions.
autoboot Automatic system bootstrap.
batch Load a batch file into memory and execute it
go

阅读更多内容

没有评论:

发表评论