liuerfire's Blog

Linux, Python, Vim, OnePiece...

比Top更好用的Htop

Linux下的监测系统程序运行的软件有很多,像system moniter,top等。对于CLI控来说,系统自带的top命令就是一个很不错的系统监测程序。我也一直用top命令查看系统进程,不过偶然发现的htop却让我眼前一亮。htop相当于top的增强版本,如图:

继续阅读

吐槽海贼王鱼人岛篇

       海贼王进入到鱼人岛篇后,个人感觉上WT有点拖剧情。虽然鱼人岛这三个字从海贼王开篇就提出来了,中间也有一直提到,可以看出鱼人岛在WT构造的海贼世界里占有很重的分量,不过想对于水之都篇中的激情四射,鱼人岛就有点像空岛篇刚开始时的平淡,甚至有些无聊。

继续阅读

Gnome 3中添加开机启动程序

今天将自己的arch装上了gnome 3,应为之前用过fedora 15,所以对gnome 3还是蛮适应的。但当我突然发现我的小企鹅输入法不能开机启动了,之前用openbox的时候,在~/.config/openbox/autostart.sh中添加就好了,gnome 3一下子不知道怎么弄了。。。以前gnome 2的时候还有配置开机启动的程序,gnome 3突然找不到了。。。

    不过还好,终于在arch wiki里找到了添加开机启动程序的方法,打开终端,输入:

1
$:gnome-session-properties

    然后熟悉的界面就出来了

接下来就自己添加吧。^_^

其实也可以通过写.desktop文件来开机启动。

在 ~/.config/autostart/ 下添加appname.desktop文件,例如要添加fcitx开机启动,可以这样写:

1
2
3
4
5
6
7
8
9
[Desktop Entry]
Type=Application
Exec=fcitx
Hidden=false
X-GNOME-Autostart-enabled=true
Name[en_US]=fcitx
Name=fcitx
Comment[en_US]=
Comment=

将fcitx改成你想开机启动的程序即可。

“海贼王,我当定了”

最新的521集,真是激动的没话说了。。。

听了10年的“海贼王,我当定了!”,还是这次最激动了!

在标准python shell中开启tab自动完成

我们在使用python shell的时候,默认没有开启tab补全功能,有时候忘记了某个函数怎么写,这时候补全功能就能给我们很大的帮助了。如果你使用的是Ipython,那tab补全默认是开启的,在标准python shell中开启tab补全,只要打开python shell,然后

1
2
>>>import rlcompleter, readline
>>>readline.parse_and_bind('tab: complete')

之后,就能在标准python shell中使用tab补全了。

为了每次都能开启tab补全,可以自己创建一个PYTHONSTARTUP文件。比如在 ~/.config/下创建文件pythonstartup.py

将上面代码写进pythonstartup.py中,再将其添加进环境变量中。

在~/.bashrc或者~/.zshrc中加入:

1
export PYTHONSTARTUP="/home/name/.config/pythonstartup.py"

 

Git的一些基本用法

 

最近自己的一些arch的配置文件经常修改,基本有着自己的风格了,为了便于更好的使用,便在github建了一个git库,方便自己管理。

因为刚使用git,便记录一些基本用法(摘自git使用指南):

第一次使用git时,需要进行一些全局设置

1
2
$ git config --global user.name "Your Name Comes Here"
$ git config --global user.email you@yourdomain.example.com

进入工作目录,并初始化git仓库

1
2
$: cd WORK_DIR
$: git init
 
上述操作的结果是在 $WORK 目录下创建了一个 .git 隐藏目录,它就是所谓的 Git 仓库,不过现在它还是空的。另外 $WORK目录也不再是普通的文档目录了,今后我们将其称为工作树
 
下面应当有选择地将工作树中的一些文档存储至 Git 仓库中。由于 Git 在向仓库中添加文档时并非是简单地文档复制过去,势必要将所添加文档进行一番处理,生成 Git 仓库所能接受的数据格式,Git 称这个过程为 "take a snapshot"(生成快照)。若将工作树下所有文档(包含子目录)生成快照,可采用以下命令:
1
2
$: cd WORK_DIR
$: git add .
所生成的快照被存放到一个临时的存储区域,Git 称该区域为索引。使用 git-commit 命令可将索引提交至仓库中,这个过程称为提交,每一次提交都意味着版本在进行一次更新。git-commit 最简单的用法如下:
1
$: git commit
执行上述 git-commit 命令时,Git 会自动调用系统默认的文本编辑器,要求你输入版本更新说明并保存。请记住,输入简约的版本更新说明是非常有必要的,它就像剧本一样,可以帮助你快速回忆起对项目的重大改动。
对于简短的版本更新信息,可以使用 git-commit 的“-m”选项,如下:
1
$ git commit -m "你的版本更新信息"
 

 

我的vim配置文件

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
let mapleader = ";"    " 比较习惯用;作为命令前缀,右手小拇指直接能按到
" 把空格键映射成:
nmap <space> :
 
" 快捷打开编辑vimrc文件的键盘绑定
map <silent> <leader>ee :e $HOME/.vimrc<cr>
autocmd! bufwritepost *.vimrc source $HOME/.vimrc
 
inoremap <leader>n <esc>
 
" 自动切换目录
autocmd BufEnter * silent! lcd %:p:h
 
" 判断操作系统
if (has("win32") || has("win64") || has("win32unix"))
    let g:isWin = 1
else
    let g:isWin = 0
endif
 
" 判断是终端还是gvim
if has("gui_running")
    let g:isGUI = 1
else
    let g:isGUI = 0
endif
 
"======================================================
" 基本设置
" {{{
set nocompatible    " 关闭兼容模式
set display=lastline
syntax enable       " 语法高亮
filetype plugin on  " 文件类型插件
filetype indent on
set shortmess=atI   " 去掉欢迎界面
set autoindent
autocmd BufEnter * :syntax sync fromstart
set nu              " 显示行号
set showcmd         " 显示命令
set lz              " 当运行宏时,在命令执行完成之前,不重绘屏幕
set hid             " 可以在没有保存的情况下切换buffer
set backspace=eol,start,indent
set whichwrap+=<,>,h,l " 退格键和方向键可以换行
set incsearch       " 增量式搜索
set nohlsearch
"set hlsearch        " 高亮搜索
set ignorecase      " 搜索时忽略大小写
set magic           " 额,自己:h magic吧,一行很难解释
set showmatch       " 显示匹配的括号
set nobackup        " 关闭备份
set nowb
set noswapfile      " 不使用swp文件,注意,错误退出后无法恢复
set lbr             " 在breakat字符处而不是最后一个字符处断行
set ai              " 自动缩进
set si              " 智能缩进
set cindent         " C/C++风格缩进
set wildmenu        
set nofen
set fdl=10
 
" tab转化为4个字符
set expandtab
set smarttab
set shiftwidth=4
set tabstop=4
 
" 不使用beep或flash
set vb t_vb=
 
set background=dark
set t_Co=256
colorscheme desert256
 
set history=400  " vim记住的历史操作的数量,默认的是20
set autoread     " 当文件在外部被修改时,自动重新读取
set mouse=n     " 在所有模式下都允许使用鼠标,还可以是n,v,i,c等
 
"}}}
"======================================================
 
"在gvim中高亮当前行
if (g:isGUI)
    set cursorline
    colorscheme wombat
    hi cursorline guibg=#333333
    hi CursorColumn guibg=#333333
    "set guifont=Consolas\ 10
    set gfn=Ubuntu\ Mono\ 12
    set guifontwide=Ubuntu\ Mono\ 12
    " 不显示toolbar
    set guioptions-=T
    " 不显示菜单栏
    set guioptions-=m
    " 关闭左右滚动条
    set guioptions-=L
    set guioptions-=r
endif
 
"====================================================== 
 
" 设置字符集编码,默认使用utf8
if (g:isWin)
    let &termencoding=&encoding " 通常win下的encoding为cp936
    set fileencodings=utf8,cp936,ucs-bom,latin1
else
    set encoding=utf8
    set fileencodings=utf8,gb2312,gb18030,ucs-bom,latin1
endif
 
"======================================================
 
" 状态栏
set laststatus=2      " 总是显示状态栏
highlight StatusLine cterm=bold ctermfg=yellow ctermbg=blue
" 获取当前路径,将$HOME转化为~
function! CurDir()
    let curdir = substitute(getcwd(), $HOME, "~", "g")
    return curdir
endfunction
set statusline=[%n]\ %f%m%r%h\ \|\ \ pwd:\ %{CurDir()}\ \ \|%=\|\ %l,%c\ %p%%\ \|\ ascii=%b,hex=%b%{((&fenc==\"\")?\"\":\"\ \|\ \".&fenc)}\ \|\ %{$USER}\ @\ %{hostname()}\
 
"======================================================
 
" 第80列往后加下划线
"au BufWinEnter * let w:m2=matchadd('Underlined', '\%>' . 80 . 'v.\+', -1)
 
" 根据给定方向搜索当前光标下的单词,结合下面两个绑定使用
function! VisualSearch(direction) range
    let l:saved_reg = @"
    execute "normal! vgvy"
    let l:pattern = escape(@", '\\/.*$^~[]')
    let l:pattern = substitute(l:pattern, "\n$", "", "")
    if a:direction == 'b'
        execute "normal ?" . l:pattern . "<cr>"
    else
        execute "normal /" . l:pattern . "<cr>"
    endif
    let @/ = l:pattern
    let @" = l:saved_reg
endfunction
" 用 */# 向 前/后 搜索光标下的单词
vnoremap <silent> * :call VisualSearch('f')<CR>
vnoremap <silent> # :call VisualSearch('b')<CR>
 
"======================================================
 
 
" 自定义按键
" {{{
 
" 在文件名上按gf时,在新的tab中打开
"map gf :tabnew <cfile><cr>
 
" 用c-j,k在buffer之间切换
nn <C-J> :bn<cr>
nn <C-K> :bp<cr>
 
" Bash(Emacs)风格键盘绑定
imap <C-e> <END>
imap <C-a> <HOME>
 
"从系统剪切板中复制,剪切,粘贴
map <F2> "+y
map <F3> "+x
map <F4> "+p
 
 
" 快捷输入
" 自动完成括号和引号
inoremap <leader>1 ()<esc>:let leavechar=")"<cr>i
inoremap <leader>2 []<esc>:let leavechar="]"<cr>i
inoremap <leader>3 {}<esc>:let leavechar="}"<cr>i
inoremap <leader>4 {<esc>o}<esc>:let leavechar="}"<cr>O
inoremap <leader>q ''<esc>:let leavechar="'"<cr>i
inoremap <leader>w ""<esc>:let leavechar='"'<cr>i
 
" c-j自动补全,当补全菜单打开时,c-j,k上下选择
imap <expr> <c-j>      pumvisible()?"\<C-N>":"\<C-X><C-O>"
imap <expr> <c-k>      pumvisible()?"\<C-P>":"\<esc>"
" f:文件名补全,l:行补全,d:字典补全,]:tag补全
imap <C-]>             <C-X><C-]>
imap <C-F>             <C-X><C-F>
imap <C-D>             <C-X><C-D>
imap <C-L>             <C-X><C-L>
"}}}
"======================================================
 
" 恢复上次文件打开位置
set viminfo='10,\"100,:20,%,n~/.viminfo
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif
 
" 删除buffer时不关闭窗口
command! Bclose call <SID>BufcloseCloseIt()
function! <SID>BufcloseCloseIt()
    let l:currentBufNum = bufnr("%")
    let l:alternateBufNum = bufnr("#")
 
    if buflisted(l:alternateBufNum)
        buffer #
    else
        bnext
    endif
 
    if bufnr("%") == l:currentBufNum
        new
    endif
 
    if buflisted(l:currentBufNum)
        execute("bdelete! ".l:currentBufNum)
    endif
endfunction
 
"======================================================
 
" 插件设置
" {{{
 
" 插件窗口的宽度,如TagList,NERD_tree等,自己设置
let s:PlugWinSize = 25
 
" autocomplpop.vim
let g:acp_behaviorKeywordLength = 4
"======================================================
 
" ConqueTerm.vim
let g:ConqueTerm_FastMode = 1        " enable fast mode
let g:ConqueTerm_Color = 0           " diable terminal colors
let g:ConqueTerm_CloseOnEnd = 1      " close buffer when program exits
"====================================================== 
 
" tagbar.vim
" <leader>tb 打开Tagbar窗口
nmap <silent> <leader>tb :TagbarToggle<CR>
let g:tagbar_left = 0
let g:tagbar_width = 25
"======================================================
 
" taglist.vim
" <leader>t 打开TagList窗口,窗口在右边
nmap <silent> <leader>t :TlistToggle<cr>
"let Tlist_Ctags_Cmd = '/usr/bin/ctags'
let Tlist_Show_One_File = 0
let Tlist_Exit_OnlyWindow = 1
let Tlist_Use_Right_Window = 1
let Tlist_File_Fold_Auto_Close = 1
let Tlist_GainFocus_On_ToggleOpen = 0
let Tlist_WinWidth = s:PlugWinSize
let Tlist_Auto_Open = 0
let Tlist_Display_Prototype = 0
"let Tlist_Close_On_Select = 1
"======================================================
 
 
" OmniCppComplete.vim
set completeopt=menu
let OmniCpp_NamespaceSearch = 1
let Omnicpp_GlobalScopeSearch = 1
let OmniCpp_ShowPrototypeInAbbr = 1
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]     " 逗号分割的字符串
let OmniCpp_MayCompleteScope = 1
let OmniCpp_SelectFirstItem = 2
"======================================================
 
" NERD_commenter.vim
" Toggle单行注释/“性感”注释/注释到行尾/取消注释
map <leader>cc ,c<space>
map <leader>cs ,cs
map <leader>c$ ,c$
map <leader>cu ,cu
"======================================================
 
" NERD tree
let NERDTreeShowHidden = 1
let NERDTreeWinPos = "left"
let NERDTreeWinSize = s:PlugWinSize
nmap <leader>f :NERDTreeToggle<cr>
"======================================================
 
 
" DoxygenToolkit.vim
" 暂时没有使用
 
" 更新ctags和cscope索引
" href: http://www.vimer.cn/2009/10/把vim打造成一个真正的ide2.html
" 稍作修改,提取出DeleteFile函数,修改ctags和cscope执行命令
 
map <F5> :call Do_CsTag()<cr>
function! Do_CsTag()
    let dir = getcwd()
 
    "先删除已有的tags和cscope文件,如果存在且无法删除,则报错。
    if ( DeleteFile(dir, "tags") )
        return
    endif
    if ( DeleteFile(dir, "cscope.files") )
        return
    endif
    if ( DeleteFile(dir, "cscope.out") )
        return
    endif
 
    if(executable('ctags'))
        silent! execute "!ctags -R --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q ."
    endif
    if(executable('cscope') && has("cscope") )
        if(g:isWin)
            silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"
        else
            silent! execute "!find . -iname '*.[ch]' -o -name '*.cpp' > cscope.files"
        endif
        silent! execute "!cscope -b"
        execute "normal :"
        if filereadable("cscope.out")
            execute "cs add cscope.out"
        endif
    endif
    " 刷新屏幕
    execute "redr!"
endfunction
 
function! DeleteFile(dir, filename)
    if filereadable(a:filename)
        if (g:isWin)
            let ret = delete(a:dir."\\".a:filename)
        else
            let ret = delete("./".a:filename)
        endif
        if (ret != 0)
            echohl WarningMsg | echo "Failed to delete ".a:filename | echohl None
            return 1
        else
            return 0
        endif
    endif
    return 0
endfunction
 
" cscope 绑定
if has("cscope")
    set csto=1
    set cst
    set nocsverb
    if filereadable("cscope.out")
        cs add cscope.out
    endif
    set csverb
    " s: C语言符号  g: 定义     d: 这个函数调用的函数 c: 调用这个函数的函数
    " t: 文本       e: egrep模式    f: 文件     i: include本文件的文件
    nmap <leader>ss :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    nmap <leader>sg :cs find g <C-R>=expand("<cword>")<CR><CR>
    nmap <leader>sc :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    nmap <leader>st :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    nmap <leader>se :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
    nmap <leader>sf :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
    nmap <leader>si :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>
    nmap <leader>sd :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>
endif
 
 
" Buffers Explorer (需要genutils.vim)
let g:bufExplorerDefaultHelp=0       " Do not show default help.
" let g:bufExplorerShowRelativePath=1  " Show relative paths.
let g:bufExplorerSortBy='mru'        " Sort by most recently used.
let g:bufExplorerSplitRight=0        " Split left.
let g:bufExplorerSplitVertical=1     " Split vertically.
let g:bufExplorerSplitVertSize = s:PlugWinSize  " Split width
let g:bufExplorerUseCurrentWindow=1  " Open in new window.
autocmd BufWinEnter \[Buf\ List\] setl nonumber
nmap <silent> <Leader>b :BufExplorer<CR>
"======================================================
 
" xmledit settings
let xml_use_xhtml = 1
"======================================================
 
" Vimwiki配置
let g:vimwiki_list = [{'path': '~/Dropbox/MyWiki/my_site/',
            \ 'path-html': '~/Dropbox/MyWiki/my_site_html/',
            \ 'html-header': '~/Dropbox/MyWiki/templates/header.tpl',
            \ 'html-footer': '~/Dropbox/MyWiki/templates/footer.tpl'}]
let g:vimwiki_camel_case=0
 
let wiki = {}
let wiki.path = '~/Dropbox/MyWiki/my_site/'
let wiki.nested_syntaxes = {'python': 'python', 'c++': 'cpp'}
let g:vimwiki_list = [wiki]
 
"}}}
"======================================================
 
 
" 文件类型
 
au BufNewFile,BufRead *.t2t set ft=txt2tags
 
"au FileType python set ft=python.django
"au FileType html set ft=htmldjango.html
 
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType java set omnifunc=javacomplete#Complete
 
"======================================================