Show 一下我的 Vim
正在学 VC++,当然是先学 C++,可是每次打开一个虚拟机,用那个一点也不好用的 VC++ 编程,真是一件痛苦的事情……
于是我卧薪尝胆、发奋图强,终于把 Vim 配置得差不多了。
看一下效果~
我的 .vimrc:
"设定操作系统 function! MySys() return "linux" endfunction """"""""""""""""""""""""""""""""""""""" "常规 """"""""""""""""""""""""""""""""""""""" "编码 set fileencodings=ucs-bom,utf-8,gb18030,gb2312,gbk,cp936 "文件类型识别 filetype plugin indent on "设置shell if MySys() == "linux" set shell=bash endif "关闭兼容模式 set nocompatible "外部修改时自动读取 set autoread "设置鼠标 set mouse=a "设置历史 set history=400 "设置mapleader let mapleader="," let g:mapleader="," let g:C_MapLeader="," "设置Tlist "let Tlist_Show_One_File=1 "let Tlist_Auto_Open=1 let Tlist_Exit_OnlyWindow=1 let Tlist_Use_SingleClick=1 let Tlist_Auto_Highlight_Tag=1 let tlist_make_settings='make;m:makros;t:targets' let tlist_qmake_settings='qmake;t:SystemVariables' "winManager let g:persistentBehaviour=0 let g:winManagerWindowLayout='FileExplorer|TagList' :set cscopequickfix=s-,c-,d-,i-,t-,e- """"""""""""""""""""""""""""""""""""""" "界面 """"""""""""""""""""""""""""""""""""""" "显示行号 set number "显示光标位置 set ruler "增强命令行补全 set wildmenu "设置命令行高度 set cmdheight=2 "减少刷新和重画 set lz "设置退格键 set backspace=eol,start,indent "设置跨行键 set whichwrap+=<,>,h,l "搜索时忽略大小写 set ignorecase "搜索时高亮关键字 set hlsearch "设置magic set magic "关闭提示音 set noerrorbells set novisualbell set vb t_vb= "自动匹配括号 set showmatch set mat=2 """"""""""""""""""""""""""""""""""""""" "文本 """"""""""""""""""""""""""""""""""""""" "设置Tab键 set expandtab set smarttab set tabstop=4 set shiftwidth=4 "自动缩进与智能缩进 set autoindent set smartindent "换行不截断单词 set linebreak "C风格缩进 set cindent set guifont=terminus\ 10 "自动补全 set completeopt=longest,menu """"""""""""""""""""""""""""""""""""""" "状态条 """"""""""""""""""""""""""""""""""""""" set laststatus=2 """"""""""""""""""""""""""""""""""""""" "外观 """"""""""""""""""""""""""""""""""""""" "语法高亮 syntax enable "设置颜色主题 set t_Co=256 colorscheme darkblue "高亮当前行 set cursorline if has("gui_running") colorscheme slate hi cursorline guibg=#333333 hi CursorColumn guibg=#333333 endif "高亮菜单 hi Pmenu guibg=#333333 hi PmenuSel guibg=#555555 guifg=#ffffff """""""""""""""""""""""""""""""""""""" "Ctags """"""""""""""""""""""""""""""""""""""" set tags+=/home/iven/.vim/gtktags set autochdir """"""""""""""""""""""""""""""""""""""" "补全快捷键 """"""""""""""""""""""""""""""""""""""" function! SuperCleverTab() if strpart(getline('.'), 0, col('.') - 1) =~ '^\s*$' return "\" else if &omnifunc != '' return "\\" elseif &dictionary != '' return "\" else return "\" endif endif endfunction inoremap =SuperCleverTab() """""""""""""""""""""""""""""""""""""" "快捷键 """"""""""""""""""""""""""""""""""""""" "Tlist noremap :Tlist inoremap :Tlist map w :WMToggle "快速保存 nmap w :w "快速重载.vimrc "map s :source ~/.vimrc "快速编辑.vimrc "map e :e ~/.vimrc "当.vimrc改变时,自动重载 autocmd! bufwritepost vimrc source ~/.vimrc "Paste toggle - when pasting something in, don't indent. set pastetoggle= "Remove indenting on empty lines map :%s/\s*$//g:noh'' "去除空行 map :g/^$/d "Super paste inoremap :set pastemui+mv'uV'v=:set nopaste "切换Tab map :tabnext "切换buffer map bn :bnext map bp :bprevious "生成Ctags map cta :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q:TlistUpdate """"""""""""""""""""""""""""""""""""""" "Python """"""""""""""""""""""""""""""""""""""" "自动补全 autocmd FileType python set complete+=k~/.vim/pydiction isk+=., "快速运行 au FileType python map :w!:!python % "快速补全 au FileType python inoremap $r return au FileType python inoremap $s self au FileType python inoremap $c ####kla au FileType python inoremap $i import au FileType python inoremap $p print au FileType python inoremap $d """"""O
呵呵,接下来就是学习 Vim 本身的用法了……可是不知道什么时候才有时间……
配置时参考了 Easwy Yang 大侠的《vim使用进阶》,在此深表感谢!
制作LFS过程中各个阶段恢复工作状态的方法 第二版(适合LFS6.3)(转贴)
更新日志
2008年2月10日:本文发布
前提:
对于做过一两次LFS的朋友,想必对LFS的漫长制作时间印象深刻,特别是对机器不太好的朋友,有时候LFS的制作时间真是“可怕”,有时候不得以必 须关机然后重新启动并恢复到工作状态,但对一些不太清楚LFS的工作原理的朋友,可能一时无法正确的恢复到工作状态,因此为了能成功的完成LFS,有的会 开个一两天的机器不关,本人特别针对这个问题写了一些自己的经验,以下的过程全部经过测试,应该是正确的,希望能给还在LFS制作中的朋友减轻一些“痛苦 ”。
为了说明方便,例子采用VMWare5.0的环境下开始的,但也同样适合使用真实机器的情况,只是用真实的机器需要在相应的磁盘设备名上修改成实际的设备名。(用VMWare只是为了说明方便,VMware本身就具有暂停的功能,所以不必计较这个问题)
文章使用VMWare5.0虚拟的SCSI设备,并使用sda设备名,sda1用于swap,而sda2用于目标系统的根目录。
本文为《手把手教你如何建立自己的Linux系统(LFS速成手册) 第二版》中恢复工作部分的截选,如想查看该文可以见youbest.cublog.cn或者http://www.linuxsir.org/bbs/showthread.php?t=322894
更新:
本文难免出现一些错误或者笔误,也有可能加入新内容,因此难免会进行修正或增删一些内容,如果本文被转载可以在www.linuxsir.org的LFS版中或者在本人的Blog中查看最新版本。
linuxsir:http://www.linuxsir.org/bbs/showthread.php?t=322895
我的Blog:http://youbest.cublog.cn
如须转载请注明作者为孙海勇(冲天飞豹),并提供转载出处。
以下是按照LFS6.3里面的章节数写的,如果你使用的LFS-Book与下面的章节数有出入,以章节数后面的标题为准。
开始~4.4. Setting Up the Environment
从头开始好了,没什么好可惜的。
4.5. About SBUs~5.33. Stripping
从现在开始一直到第五章结束,也就是完成Stripping中间的步骤中如果重新启动的恢复步骤:
1.重新启动计算机,并从LiveCD启动
2.加载分区
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
swapon /dev/sda1
4.建立工具链的链接
ln -sv $LFS/tools /
5.创建lfs用户
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
chown -v lfs $LFS/tools
chown -v lfs $LFS/sources
su - lfs
6.建立lfs用户的环境
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL PATH
EOF
source ~/.bash_profile
7.检查一下
export命令查看输出,应该是
declare -x HOME="/home/lfs"
declare -x LC_ALL="POSIX"
declare -x LFS="/mnt/lfs"
declare -x OLDPWD
declare -x PATH="/tools/bin:/bin:/usr/bin"
declare -x PS1="\\u:\\w\\\$ "
declare -x PWD="/home/lfs"
declare -x SHLVL="1"
declare -x TERM="linux"
基本上就恢复工作状态了。
6.1. Introduction
这个时候也许你想睡觉关机了,那么重新开机后回到工作状态的步骤是:
1.重新启动计算机,并从LiveCD启动
2.加载分区
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
swapon /dev/sda1
相关知识点:
这时候已经制作好了工具链,因此可以不需要建立根目录下的tools链接了。
6.2. Mounting Virtual Kernel File Systems~6.8. Populating /dev
这个时候如果你关机或重新启动,那么重新开机后回到工作状态的步骤是:
1.重新启动计算机,并从LiveCD启动
2.加载分区
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
swapon /dev/sda1
4.加载必要的文件系统
mount -v --bind /dev $LFS/dev
mount -vt devpts devpts $LFS/dev/pts
mount -vt tmpfs shm $LFS/dev/shm
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
5.Chroot到目标系统下
chroot "$LFS" /tools/bin/env -i \
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
/tools/bin/bash --login +h
6.9. Linux-Libc-Headers-2.6.11.2~6.59. Stripping Again
从现在开始一直到第六章的Stripping Again之前,这个阶段如果你关机或重新启动,那么重新开机后回到工作状态的步骤是:
1.重新启动计算机,并从LiveCD启动
2.加载分区
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
swapon /dev/sda1
4.加载必要的文件系统
mount -v --bind /dev $LFS/dev
mount -vt devpts devpts $LFS/dev/pts
mount -vt tmpfs shm $LFS/dev/shm
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
5.Chroot到目标系统下
chroot "$LFS" /tools/bin/env -i \
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
/bin/bash --login +h
6.进入编译目录
cd /sources
6.61. Stripping Again
如果现在重新启动,那么重新开机后回到工作状态的步骤是:
1.重新启动计算机,并从LiveCD启动
2.加载分区
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
swapon /dev/sda1
4.加载必要的文件系统
mount -v --bind /dev $LFS/dev
mount -vt devpts devpts $LFS/dev/pts
mount -vt tmpfs shm $LFS/dev/shm
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
5.Chroot到目标系统下
chroot "$LFS" /tools/bin/env -i \
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
/tools/bin/bash --login
6.62. Cleaning Up~结束
从现在开始一直到制作结束,重新开机后回到工作状态的步骤是:
1.重新启动计算机,并从LiveCD启动
2.加载分区
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
swapon /dev/sda1
4.加载必要的文件系统
mount -v --bind /dev $LFS/dev
mount -vt devpts devpts $LFS/dev/pts
mount -vt tmpfs shm $LFS/dev/shm
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
5.Chroot到目标系统下
chroot "$LFS" /usr/bin/env -i \
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin \
/bin/bash --login
6.进入编译目录
cd /sources
(转载请保持文章的完整性,请注明作者和出处)
作者:孙海勇(冲天飞豹)
Email:youbest@sina.com
2008年2月10日
更新日志:
2008年2月10日:本文发布。
via:http://www.linuxsir.org/bbs/thread322895.html
星际译王出现“错误的文件描述符”的解决办法
查单词的时候,经常出现一个对话框,说“错误的文件描述符”,每次点了之后才会继续取词,真是麻烦。
上网查了查,发现是网络辞典造成的问题,将它关掉就可以了。
不知道是不是错觉,似乎关掉这个之后,查词速度变快了呢。
SourceForge 增加了新的版本控制系统支持
SourceForge 已经增加了对目前三种最为流行的分布式版本控制系统 Git,Bazaar,和 Mercurial 的支持。网站同时增加了一个吸引人的托管程序特性——允许用户使用 SourceForge 的基础设施来开启多种开源软件管理和协作的服务(包括 Trac,Mantis,和 phpBB)。
via: http://arstechnica.com/open-source/news/2009/03/sourceforge-adds-support-for-new-version-control-systems.ars
推荐一款 Linux 下磁盘使用分析器 FileLight
Gnome 自带的磁盘使用分析器(disk-usage-analyser)确实不错,可惜想要安装,必须整个安装 gnome-utils,而自从换了 Shutter 作为截图工具后,就把这个包卸载了。
那么,Linux 下还有没有功能强大的磁盘使用分析工具呢?推荐这款 FileLight。
FileLight 是一款基于 QT 的磁盘使用分析工具,目前的版本是 1.0。
可以看出,在主界面,FileLight 比 disk-usage-analyser 直观得多。
详情界面同样强大。
还支持变色,这个是 KDE 色调。
最新版的 FileLight 可以从它的官方网站获得。
晒一下我的书单~
呵呵,已经决定考计算机了,就和同学把书买了下来,220元哩~就是为了这些钱也要努力学习……(虽然已经两天没上自习了……)
书是在互动买的,主要是觉得货到付款比较方便,虽然书不是最便宜的……
| 书 名 | 数 量 | 产品单价 | 状 态 | ||||||||
| 计算机网络(第5版) (08年度畅销榜TOP50) | 2 | ¥26.25 | 发货 | ||||||||
| 操作系统考研指导 | 1 | ¥20.25 | 发货 | ||||||||
| 操作系统考研辅导教程 | 1 | ¥18.75 | 发货 | ||||||||
| 计算机组成原理:学习指导与习题解答 (08年度畅销榜TOP50) | 1 | ¥22.24 | 发货 | ||||||||
| 计算机操作系统(第三版) | 2 | ¥22.50 | 发货 | ||||||||
| 计算机组成原理(第四版.立体化教材) | 1 | ¥31.20 | 发货 | ||||||||
| 计算机组成原理(第2版)(附光盘)( |
1 | ¥30.80 | 发货 | ||||||||
|
|||||||||||
使用 PolicyKit 进行身份认证(下)
PolicyKit 的配置文件
分析完了 PolicyKit 的机制,我们来看一下它的配置文件是如何书写的。
PolicyKit 的配置文件藏在哪里呢?我们来进入/usr/share/PolicyKit/policy这个目录,怎么样,是不是看到很多.policy文件?(不要告诉我你没装 PolicyKit ……)
好的,打开其中的org.freedesktop.hal.storage.policy这个文件,你可能会看到下面的内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN" "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd"> <policyconfig> <action id="org.freedesktop.hal.storage.mount-fixed"> <description>Mount file systems from internal drives.</description> <message>System policy prevents mounting internal media</message> <defaults> <allow_inactive>no</allow_inactive> <allow_active>auth_admin_keep_always</allow_active> </defaults> </action> <action id="org.freedesktop.hal.storage.mount-removable"> <description>Mount file systems from removable drives.</description> <message>System policy prevents mounting removable media</message> <defaults> <allow_inactive>no</allow_inactive> <allow_active>yes</allow_active> </defaults> </action> </policyconfig> 我们来依次分析一下: id:id 是对 PolicyKit 中 Action 的唯一标识,可以看到,各个域从大到小,用圆点分隔。从下图我们可以看出,这是一种树形结构。description:这个是注释,没什么好说的,让读配置文件的人知道这个选项的意义。 message:这个就是前面提到的说明字符串了,强烈推荐写上,让使用者明白他在验证什么操作,以免引发安全隐患。 defaults:关键的地方到了!这里可以写上对于请求者是否为活动状态的三种情况(allow_any、allow_inactive、allow_active)返回的值。 可以返回的值有以下几种: no
auth_self_one_shot auth_self auth_self_keep_session auth_self_keep_always auth_admin_one_shot auth_admin auth_admin_keep_session auth_admin_keep_always yes这个实在没有什么可说的,它们的作用从字面上理解就可以了……如果不懂还是好好学学英语吧……
好了,说了这么多,可能大家还是不知道怎么使用 PolicyKit 编程吧?其实最简单的办法还是看手册啊!什么,你想要例子?看下这里吧!呵呵,相信懂得原理的你,再看这个例子的时候就不会那么吃力,很快就能应用 PolicyKit 进行编程了吧?
(全文完)
使用 PolicyKit 进行身份认证(中)
PolicyKit 的运作流程
在上次的图中,我们可以看出 PolicyKit 运作过程中的几个要素:请求发出者(gnome-mount),请求目标(磁盘),请求的动作(挂载)。下面我们来看一下 PolicyKit 的运作流程。
图一:用户点击了磁盘图标,系统通过 DBus 发送请求给 HAL。
图二:HAL收到并验证请求(请求被包装在一个叫做 PolKitCaller 的对象中,包含 uid 、 pid 、会话标识符、会话是否为活动状态、是否远程、远程地址和其他可选信息),并据此构建了 PolKitCaller 对象,之后,HAL 会调用 libpolkit 中的函数 polkit_context_can_caller_do_action () ,并把以上两个结构体作为参数。
根据这个函数传递来的参数,系统会到 PolicyKit 的配置文件(关于配置文件,会在下次说明)中进行验证,根据配置文件的返回值和验证数据库中的内容决定是否允许请求的操作。
可能的返回值有三种:通过(POLKIT_RESULT_YES)、拒绝(POLKIT_RESULT_NO)、需要验证(POLKIT_RESULT_AUTH 系列)。返回值被包含在一个叫做 PolKitResult 的结构体中。
图三:当返回值不是 POLKIT_RESULT_YES 时,HAL 把这个返回值外加之前所请求的操作一起返回给请求者。
图四:如果返回值是 POLKIT_RESULT_AUTH 系列(例如 POLKIT_RESULT_AUTH_ADMIN_KEEP_ALWAYS),顺带返回的还有定义在配置文件里的说明字符串(这样可以识别你正在验证的是什么动作)。
现在文件管理器知道想要随便挂载一个磁盘是不行的了,只好向 Authentication Agent 求助,说:”快快!帮我做个验证窗口出来!“顺带把刚才 HAL 发给它的 PolKitResult 和 PolKitAction 发给它。
图五:Authentication Agent 收到请求,也跟图二中的 HAL 一样,先验证一下传来的东西是否正确,构建个 PolKitCaller 去配置文件那里验证一下,检查 PolKitResult 是否和文件管理器传过来的一样。
然后 Authentication Agent 听话地构建一个验证窗口,包含之前返回的说明字符串。
图六:如果验证成功,它会让 HAL 去重新请求一下。此时因为验证成功,验证数据库中已经允许了此程序,当然验证通过了!
下次我们来分析一下 PolicyKit 的配置文件。
无忧网络文章管理系统 真的很好用~
上次说到做网站,目前网站的情况是这样的,学院原来放网站的计算机被病毒挂了,汗……于是重新做一个。
手头上有原来网站的代码,无病毒版,我一看,觉得那网站被病毒挂掉真是天命使然……是我也忍不住想要痛扁做网页的人一顿……
于是赶快研究一下无忧的用法,一用之下真是太爽了!(我承认我现在还没有做动态整站的能力……)
清爽的管理页面:
简洁的网站界面,采用 Div + Css 架构,还有可爱的古乐兽,呃,是图像预览功能。
轻松把一段 HTML 保存为标签(类似 widget 的东西)。
静态生成页面,这样就不依赖 SQL Server 了,也不用每次跟人解释什么是数据库了。
文章发布页面,功能很全,所见即所得,以后管理方便。
总之,用这个系统快速搭建网站实在是方便极了,只要改改 CSS,把以前做过的标签一粘贴,一个新的网站就诞生了!实在是居家行凶、杀人放火、批量生成网站、骗取项目经费必备的利器啊!
(呵呵,实在是没有时间做网站了,否则也不会出此下策,有时间好好学学 PHP。)












