我封装的Kali-VirtualBox
虚拟机有如下特点:
- 英文系统,终端可以设置为中文(
export LANG=zh_CN.UTF-8
) - 已安装拼音输入法(默认只有英文输入法),后面有简述
- 已实现科学上网,后面有简述
- 已按我的使用习惯配置了
Bash
和Vim
,后面会详述 - 已将
apt
(kali
中用于安装软件包的程序)源设置为西电开源镜像站 - 已禁用了
network-manager
(一个图形化的网络管理器,禁用它是怕冲突,以及为了更好地学习底层知识) - 已更新至 2018-11-07 (即在2018-11-07这一天使用了
apt upgrade
命令) - 只有root用户,密码为
346342
,开机自动登陆
下面将详细讲解各部分的用法:
1 Vim
主要配置文件为~/.vimrc
(也就是每次启动vim
都会执行的vim脚本,也是在命令行模式下输入的命令的集合)
我的Vim中主要安装了下列插件:
1
2
3
4
5
6
7
8
9
10
Plug 'junegunn/vim-plug'
Plug 'Raimondi/delimitMate'
Plug 'mzlogin/vim-markdown-toc', { 'for': 'markdown'}
Plug 'dhruvasagar/vim-table-mode', { 'for': 'markdown'}
Plug 'mattn/emmet-vim', {'for': ['html', 'css', 'xml']}
Plug 'Valloric/YouCompleteMe' ", { 'do': './install.py --clang-completer --java-completer' }
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
Plug 'Yggdroot/indentLine', {'for': ['python']}
Plug 'tell-k/vim-autopep8'
且编译时加了python2.7
的支持,可以和python2.7
很好地合作。
先简要提一下在Vim
本身中常用的技巧:
Vim
五种常用模式:普通模式、插入模式、命令行模式、选择模式(Visual Mode)、搜索模式。在任意模式中按Esc
或Ctrl+[
进入(可能需要多次)普通模式;在普通模式中使用插入相关的命令(如i
)进入插入模式;在普通模式中按:
进入命令行模式;在普通模式中按v
进入选择模式;在普通模式中按/
或?
进入搜索模式
在普通模式下:
- 参见2.1.2 普通模式
*
#
: 搜索命令。*
搜索当前单词并跳转到下一处;#
搜索当前单词并跳转到上一处K
\K
: 查询帮助命令。K
查询当前单词的man
手册(也可以先选择后再查询,即vWK
);\K
和K
一样,因为我设置的缘故,详见vim内置帮助文档:h :Man
gg
G
: 跳转命令。gg
跳至整个文件的第一行;G
跳到整个文件的最后一行50%
%
: 跳转命令。50%
跳到文件的50%处(即一半的地方,同理,25%
则跳到 1/4 处);%
(即前面不加数字)则完全不同,它用于跳转到当前括号的匹配括号处(如当前是(
,则跳到)
)<Space>
: 折叠命令。本来和l
的作用相同(即向右移动一个字符),但我将其绑定到了za
,即自动折叠或反折叠gd
gD
gf
: 跳转命令。gd
跳到当前光标所指局部变量的定义位置;gD
跳到当前光标所指全局变量的定义位置;gf
跳到当前光标所指路径的文件qa<一堆操作>q
@a
: 宏录制命令。宏是操作的集合,@:
:Ctrl+6
:Ctrl+h
Ctrl+j
Ctrl+k
Ctrl+l
:ma
'a
:.
u
Ctrl+r
:=
:&
:!
:>>
<<
:Ctrl+c
:Ctrl+g
1<C-g>
2<C-g>
在插入模式下:
Ctrl+P
:Ctrl+N
:Ctrl+X Ctrl+L
:Ctrl+X Ctrl+F
:Ctrl+O u
:<C-r>"
:- ``
在命令行模式下:
Ctrl+D
: 显示所有可能的结果Tab
: 按可能的结果依次补全h<CR>
: 输入h<CR>
(其中<CR>
是回车)可查看帮助。如下述例子:h gd
: 输入h gd
可查看普通模式下gd
命令的帮助h :h
: 输入h :h
可查看命令模式下h
命令的帮助h i_CTRL_N
: 输入h i_CTRL_N
可查看插入模式下Ctrl+N
的帮助h 'nu
: 输入h 'nu
可查看选项nu
的帮助(选项通过命令模式下的set
命令来设置,如set nu
)
在选择模式下:
//
:K
:
在搜索模式下(使用正则表达式,注意和标准的有点不同):
/abc
:/\<abc\>
/^abc
:
下面就针对Python语言详述各插件(Python用得上的插件)的常见用法:
1.1 YouCompleteMe:补全代码的插件
输入字符超过2个,即会出现补全菜单,主要支持本文档内的补全(注释中的不会用于补全,如想补全注释中的内容,可以使用Ctrl+N和Ctrl+P)、语义补全(根据编程语言自动解析补全,精准度很高)、代码片断补全(和 vim-snippets 配合使用)
Ctrl+N
和Ctrl+P
:出现补全菜单后,使用Ctrl+N
向下选择(也可以使用Tab
),使用Ctrl+P
向上选择\gd
(GetDoc):获取光标所在单词的帮助文档(主要是它的API)\gr
(GoToReferences):获取引用光标所在单词的所有位置\gc
(GoToDeclaration):跳转至光标所在变量的声明处,其实还可以使用Vim自带的命令gd
跳转到声明处\gg
(GoTo): 先尝试跳转至声明处,若失败,则跳转至定义处Ctrl+L
: 强制补全Ctrl+Y
:在补全菜单出现时可以使用该快捷键关闭补全菜单(有时很有用)
1.2 ultisnips 和 vim-snippets:实现编写代码片段的插件
UltiSnips
为程序本身,vim-snippets
为常用的代码片段
Ctl+J
: 在输入部分代码后按该快捷键自动补全代码片段,如#!<Ctrl+J>
自动补全如下代码片段(在Python文件中):1 2
#!/usr/bin/env python # -*- coding: utf-8 -*-
又如定义函数的代码片段
def<Ctrl+J>
:1 2 3 4 5 6 7 8
def function(arg1): """TODO: Docstring for function. :arg1: TODO :returns: TODO """ pass
输入函数名后按<Ctrl+J>跳转至下一位置,如上将是
arg1
又如,时常使用的插入日期的代码片段date<Ctrl+J>
:1
2018-11-07
若想知道有哪些可能的代码片段,可以查看
~/.vim/bundle/vim-snippets/UltiSnips/all.snippets
和~/.vim/bundle/vim-snippets/UltiSnips/python.snippets
这两个文件,此外,也可以在编辑时按<F2>
键查看针对当前文件可用的代码片段。
1.3 IndentLine: 显示对齐线
在多重循环中异常有用
\i
: 启用或关闭该插件(若原本的状态是关闭的,则启用,反之亦然)
1.4 Autopep8: 格式化Python代码
按照官方标准格式化Python
代码,超级好用
:w
: 即每次保存时会自动格式化代码
2 Bash
我采用的是vi模式(在Python解释器中亦是如此,默认的是Emacs模式),若不习惯,可修改~/.inputrc
文件,将相应的行删掉即可(其实里面只有一行 /笑哭)
主要配置文件是~/.bashrc
2.1 vi模式使用技巧
vi模式其实挺方便的(对于用过vim的人而言),下面简述某些技巧:
2.1.1 插入模式
Ctrl+W
: 向前清除一个单词Ctrl+U
: 向前清除到行首Ctrl+P
: 向上查找命令,注意,因为我在bash默认的启动文件~/.bashrc
(MacOS是~/.bash_profile
)进行了如下设置:1 2 3 4
bind '\C-p: history-search-backward' bind '\C-n: history-search-forward' bind '"\e[A":history-search-backward' bind '"\e[B":history-search-backward'
所以
Ctrl+P
将会向上查找与当前行带有相同前缀的命令,如:1 2 3
vim ~/.vimrc vim<Ctrl+P> #将会得到: vim ~/.vimrc
这个功能使得输入曾经输入过的命令变得异常方便,再也不需要傻乎乎地先用
history
查看一下命令历史,再傻乎乎地用!<history结果前的数字>
来执行输入过的命令了Ctrl+N
: 和Ctrl+P
类似,只是向下查找
2.1.2 普通模式
默认情况下处于插入模式,按Esc
或Ctrl+[
进入普通模式,普通模式下的常用命令如下:
-
i
a
I
A
: 均用于进入插入模式。i
(insert)在当前字符前插入,a
(append)在当前字符后插入,I
在当前行的第一个字符前插入,A
在当前行的最后一个字符后插入 -
j
k
: 回溯历史的命令。如同方向键向上键和向下键。注意,这和VIM中的行为不同,VIM中j
用于移动到下一行,k
用于移动到上一行 h
l
:移动命令。h
向左移动一个字符;l
向右移动一个字符0
^
$
: 移动命令。0
移动到行首;^
和0
类似,只是移动到行首的第一个非空白字符(如空格);$
移动到行尾w
e
b
W
E
B
: 移动命令。w
右移一个单词;e
和w
类似,只是停在末尾处;b
左移一个单词;W
移动到下一个空格后的第一个字符;E
和W
类似,只是停在末尾处;B
移动到上一个空格后的第一个字符f
F
t
T
,
;
: 移动命令。f
向后移动至某个字符,如fa
向后移动至a
字符;F
向前移动至某个字符;t
向后移动至某个字符的前一个字符;T
向前移动至某个字符的后一个字符;,
重复上一个和前述命令相同的移动命令;;
和,
类似,不过方向相反-
,
;
: c
(change): 改变文本并进入插入模式。该命令就配合移动命令使用,如cw
改变一个单词,cb
反向改变一个单词,cl
改变一个字符等等cc
: 改变当前行的所有内容,相当于0c$
C
: 改变当前光标所在位置至行尾的内容,相当于c$
s
(substitute):cl
的简写,用于修改一个字符-
r
(replace): 和s
类似,只是不会进入插入模式 d
(delete): 删除文本。该命令同样配合移动命令使用dd
: 删除当前行的所有内容,相当于0d$
D
: 删除当前光标所在位置至行尾的内容,相当于d$
-
x
:dl
的简写,用于删除一个字符 -
p
P
: 粘贴命令。p
(paste)在当前字符后粘贴,P
在当前字符前粘贴。注意,该命令亦可粘贴已经删除的内容 y
(yank): 复制命令。和移动命令配合使用,如yl
复制一个字符,yw
复制一个单词-
yy
: 复制整行内容。相当于0y$
v
: 进入vim中编辑(编辑多行命令或长命令时非常有用)。注意,这和VIM中的行为不同,VIM中v
用于选择,以进入Visual模式
3 关于科学上网
配置文件:~/shadowsocksr/config.json
账号找我要,仅给熟人。如果不是熟人,我们或许可以成为熟人:)。
对于浏览器FireFox
是全局的,终端下默认没有科学上网,如果需要,也可以使用sp
(Set Proxy)命令设置,这是我在~/.bashrc
中写的一个函数,灰常简单,设置了几个环境变量。取消代理使用up
(Unset Proxy)命令。
4 关于拼音输入法
使用的fcitx-pinyin
(即小企鹅输入法,这个比较强大)。可以先按Win
,再按fctix
搜索fcitx configuration
以查看更详细的信息
相关快捷键如下:
Ctrl+Space
: 启用或关闭fcitx
输入法Ctrl+.
: 切换中英文标点Ctrl+;
: 显示粘贴板当前的内容,按相应的数字可直接粘贴相应的内容。非常好用