写给自己的歌

Panda loves Bunny

 

原文出处

vimgrep 命令可用于在工程目录下的全部文件中搜索某个关键字的所有出现,它类似于在 eclipse 下使用 ctrl-h 快捷键进行 file search 操作。

在 vim 下使用 :help vimgrep 命令可以查看到 vimgrep 的使用帮助。当然你也可以通过这篇文章 (Find in files within Vim )学习这个命令。

vimgrep 命令是 vim 内置的两个 grep 工具之一,另一个是 lvimgrep。看下面的对比:

  • vimgrep vs. lvimgrep:vimgrep 将搜索返回的结果放到 quickfix list 下面,而 lvimgrep 则将结果放到了 location list。
  • quickfix vs. location list:quickfix list 是全局的,相对于窗口而言,不同的窗口共用一个quickfix list,可以使用 :cw 或者 :copen 打开;而 loaction list 是局部于某个特定窗口的,即不同窗口的 location list 可以不同,使用 :lw 或者 :lopen 命令打开。(请使用:help quickfix:help location-list命令获取帮助)

vimgrep 命令的语法构成如下:

:vim[grep][!] /{pattern}/[g][j] {file} ...

含义如下:

  • vim 可作为 vimgrep 的缩写
  • ! 可紧随 vimgrep 之后,表示强制执行该命令
  • 索的关键字 pattern 放在了两个 “/” 中间,并且支持正则表达式
  • gj 可选。 如果添加 g,将显示重复行, 如果添加 j,vim 将不会自动跳转到第一个匹配的行(可能是别的文件)

一个简单的例子:

:vimgrep /hello/j **

这个命令将在当前目录(可通过 :pwd 命令查看)及其所有子目录下搜索关键字 hello 的所有出现


最后,了解了 vimgrep 的基本用法之后,再来看一下 amix vimrc 中的 .vimruntime/vimrc/basic.vim 中关于 vimgrep 命令映射的片段:


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => vimgrep searching and cope displaying
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" When you press gv you vimgrep after the selected text
vnoremap <silent> gv :call VisualSelection('gv', '')<CR>

" Open vimgrep and put the cursor in the right position
map <leader>g :vimgrep // **/*.<left><left><left><left><left><left><left>

" Vimgreps in the current file
map <leader><space> :vimgrep // <C-R>%<C-A><right><right><right><right><right><right><right><right><right>

" When you press <leader>r you can search and replace the selected text
vnoremap <silent> <leader>r :call VisualSelection('replace', '')<CR>

" Do :help cope if you are unsure what cope is. It's super useful!
"
" When you search with vimgrep, display your results in cope by doing:
"   <leader>cc
"
" To go to the next search result do:
"   <leader>n
"
" To go to the previous search results do:
"   <leader>p
"
map <leader>cc :botright cope<cr>
map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pgg
map <leader>n :cn<cr>
map <leader>p :cp<cr>

其中映射后几个比较有用的命令有:

  • visual 模式下,选择某个关键字后,按下 gv,搜索选中的关键字
  • ,<space> ,光标落在 // 中间,在当前文件中搜索任意你指定的词
  • 将 cope 映射为可以在搜索结果中查看前后匹配项的命令 ,n ,p

amix vimrc 将 <leader>映射为,

原贴:http://blog.csdn.net/leexide/article/details/17252369

一、SSH简介

SSH是一个专为远程登录会话和其他网络服务提供安全性的协议。默认状态下SSH链接是需要密码认证的,可以通过添加系统认证(即公钥-私钥)的修改,修改后系统间切换可以避免密码输入和SSH认证。

二、公钥认证的基本思想:

对信息的加密和解密采用不同的key,这对key分别称作private key和public key,其中,public key存放在欲登录的服务器上,而private key为特定的客户机所持有。

当客户机向服务器发出建立安全连接的请求时,首先发送自己的public key,如果这个public key是被服务器所允许的,服务器就发送一个经过public key加密的随机数据给客户机,这个数据只能通过private key解密,客户机将解密后的信息发还给服务器,服务器验证正确后即确认客户机是可信任的,从而建立起一条安全的信息通道。

通过这种方式,客户机不需要向外发送自己的身份标志“private key”即可达到校验的目的,并且private key是不能通过public key反向推断出来的。这避免了网络窃听可能造成的密码泄露。客户机需要小心的保存自己的private key,以免被其他人窃取,一旦这样的事情发生,就需要各服务器更换受信的public key列表。

三、实验网络拓扑图和实验目的

1、网络拓扑图

如下所示:

2、实现目的

服务器1,服务器2,服务器3能实现彼此无密码登录。

3、补充说明

Linux下修改主机名的完整步骤如下:
第一步:

  1. #hostname Server1
#hostname Server1

第二步:

  1. 修改/etc/sysconfig/network中的hostname
修改/etc/sysconfig/network中的hostname

第三步:

  1. 修改/etc/hosts文件
修改/etc/hosts文件

四、无密码登录实现方式

1、用ssh-keygen创建公钥

(1)在服务器1上执行下面的命令:

  1. [root@Server1 ~]# ssh-keygen -t rsa
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key(/root/.ssh/id_rsa):
  4. Created directory ‘/root/.ssh’.
  5. Enter passphrase (empty for no passphrase):
  6. Enter same passphrase again:
  7. Your identification has been saved in/root/.ssh/id_rsa.
  8. Your public key has been saved in/root/.ssh/id_rsa.pub.
  9. The key fingerprint is:
  10. 7b:aa:08:a0:99:fc:d9:cc:d8:2e:4b:1a:c0:6b:da:e4root@Server1
  11. The key’s randomart image is:
  12. +–[ RSA 2048]—-+
  13. |o. S |
  14. |++. . |
  15. |+=o. . . |
  16. |o+=oB. o |
  17. |..E==*… |
  18. +—————–+
[root@Server1 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key(/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in/root/.ssh/id_rsa.
Your public key has been saved in/root/.ssh/id_rsa.pub.
The key fingerprint is:
7b:aa:08:a0:99:fc:d9:cc:d8:2e:4b:1a:c0:6b:da:e4root@Server1
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
|. |
|o. S |
|++. . |
|+=o. . . |
|o+=oB. o |
|..E==*... |
+-----------------+

输入后,会提示创建.ssh/id_rsa、id_rsa.pub的文件,其中第一个为密钥,第二个为公钥。过程中会要求输入密码,为了ssh访问过程无须密码,可以直接回车 。

(2)补充说明:
ssh-keygen:生成秘钥

-t指定算法
-f 指定生成秘钥路径
-N 指定密码

2、查看钥匙

  1. [root@Server1 ~]# ls -l .ssh
  2. -rw——-. 1 root root 1675 12月 10 22:20 id_rsa
  3. -rw-r–r–. 1 root root 394 12月 10 22:20 id_rsa.pub
[root@Server1 ~]# ls -l .ssh
总用量 8
-rw-------. 1 root root 1675 12月 10 22:20 id_rsa
-rw-r--r--. 1 root root 394 12月 10 22:20 id_rsa.pub

可以发现 ssh目录下的两枚钥匙。

3.将公钥复制到被管理机器Server2和Server3下的.ssh目录下(先确保存在这个目录)

  1. [root@server1 .ssh]# scp id_rsa.pubroot@192.168.1.3:~/.ssh/
  2. The authenticity of host ‘192.168.1.3(192.168.1.3)’ can’t be established.
  3. RSA key fingerprint is93:eb:f9:47:b1:f6:3f:b4:2e:21:c3:d5:ab:1d:ae:65.
  4. Are you sure you want to continueconnecting (yes/no)? yes
  5. Warning: Permanently added ‘192.168.1.3’(RSA) to the list of known hosts.
  6. root@192.168.1.3’s password:
  7. id_rsa.pub
  8. [root@server1 .ssh]# scp id_rsa.pubroot@192.168.1.4:~/.ssh/authorized_keys
  9. The authenticity of host ‘192.168.1.4(192.168.1.4)’ can’t be established.
  10. RSA key fingerprint is93:eb:f9:47:b1:f6:3f:b4:2e:21:c3:d5:ab:1d:ae:65.
  11. Are you sure you want to continueconnecting (yes/no)? yes
  12. Warning: Permanently added ‘192.168.1.4’(RSA) to the list of known hosts.
  13. root@192.168.1.4’s password:
  14. id_rsa.pub
[root@server1 .ssh]# scp id_rsa.pubroot@192.168.1.3:~/.ssh/
The authenticity of host '192.168.1.3(192.168.1.3)' can't be established.
RSA key fingerprint is93:eb:f9:47:b1:f6:3f:b4:2e:21:c3:d5:ab:1d:ae:65.
Are you sure you want to continueconnecting (yes/no)? yes
Warning: Permanently added '192.168.1.3'(RSA) to the list of known hosts.
root@192.168.1.3's password:
id_rsa.pub 
[root@server1 .ssh]# scp id_rsa.pubroot@192.168.1.4:~/.ssh/authorized_keys
The authenticity of host '192.168.1.4(192.168.1.4)' can't be established.
RSA key fingerprint is93:eb:f9:47:b1:f6:3f:b4:2e:21:c3:d5:ab:1d:ae:65.
Are you sure you want to continueconnecting (yes/no)? yes
Warning: Permanently added '192.168.1.4'(RSA) to the list of known hosts.
root@192.168.1.4's password:
id_rsa.pub

到Server2和Server3目录下执行下面的命令

  1. #cat id_dsa.pub >> ~/.ssh/authorized_keys
#cat id_dsa.pub >> ~/.ssh/authorized_keys

4、设置文件和目录权限:

设置authorized_keys权限

  1. $ chmod 600 authorized_keys
$ chmod 600 authorized_keys

设置.ssh目录权限

  1. $ chmod 700 -R .ssh
$ chmod 700 -R .ssh

5、验证使用SSH IP地址的方式无密码访问

  1. [root@server1 .ssh]# ssh 192.168.1.3
  2. Last login: Tue Dec 10 22:34:02 2013
  3. [root@Server2 ~]#
  4. [root@Server2 ~]#
  5. [root@Server2 ~]#
[root@server1 .ssh]# ssh 192.168.1.3
Last login: Tue Dec 10 22:34:02 2013
[root@Server2 ~]#
[root@Server2 ~]#
[root@Server2 ~]#

6、验证使用SSH 主机名的方式无密码访问

我们在Server1上将Server2和Server3的IP地址解析为主机名

  1. [root@server1 .ssh]# cat /etc/hosts
  2. 192.168.1.2 Server1
  3. 192.168.1.3 Server2
  4. 192.168.1.4 Server3
[root@server1 .ssh]# cat /etc/hosts
192.168.1.2 Server1
192.168.1.3 Server2
192.168.1.4 Server3

我们试试下面这种ssh登录方式:

  1. [root@server1 .ssh]# ssh Server3
  2. The authenticity of host ‘server3(192.168.1.4)’ can’t be established.
  3. RSA key fingerprint is93:eb:f9:47:b1:f6:3f:b4:2e:21:c3:d5:ab:1d:ae:65.
  4. Are you sure you want to continueconnecting (yes/no)? yes
  5. Warning: Permanently added ‘server3’ (RSA)to the list of known hosts.
  6. Last login: Tue Dec 10 22:34:08 2013
[root@server1 .ssh]# ssh Server3
The authenticity of host 'server3(192.168.1.4)' can't be established.
RSA key fingerprint is93:eb:f9:47:b1:f6:3f:b4:2e:21:c3:d5:ab:1d:ae:65.
Are you sure you want to continueconnecting (yes/no)? yes
Warning: Permanently added 'server3' (RSA)to the list of known hosts.
Last login: Tue Dec 10 22:34:08 2013

五、注意:

1、文件和目录的权限千万别设置成chmod 777.这个权限太大了,不安全,数字签名也不支持。
2、生成的rsa/dsa签名的公钥是给对方机器使用的。这个公钥内容还要拷贝到authorized_keys
3、linux之间的访问直接 ssh 机器ip
4、某个机器生成自己的RSA或者DSA的数字签名,将公钥给目标机器,然后目标机器接收后设定相关权限(公钥和authorized_keys权限),这个目标机就能被生成数字签名的机器无密码访问了

七月 7th, 2015

Screen 用法

No Comments, 未分类, by tumaotm_122.

原文出处

 

一、背景

系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

二、简介

GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。

GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

  • 会话恢复
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
  • 多窗口
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。
  • 会话共享
Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

GNU’s Screen 官方站点:http://www.gnu.org/software/screen/

三、语法

# screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

参数说明

-A  将所有的视窗都调整为目前终端机的大小。
-d <作业名称>  将指定的screen作业离线。
-h <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  恢复之前离线的screen作业。
-ls或–list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

四、常用screen参数

screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session

在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
C-a ? -> 显示所有键绑定信息
C-a c -> 创建一个新的运行shell的窗口并切换到该窗口
C-a n -> Next,切换到下一个 window
C-a p -> Previous,切换到前一个 window
C-a 0..9 -> 切换到第 0..9 个 window
Ctrl+a [Space] -> 由视窗0循序切换到视窗9
C-a C-a -> 在两个最近使用的 window 间切换
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
C-a w -> 显示所有窗口列表
C-a t -> Time,显示当前时间,和系统的 load
C-a k -> kill window,强行关闭当前的 window
C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上

六月 5th, 2015

Vim 用法

No Comments, 使用心得, by tumaotm_122.

转自:http://www.lupaworld.com/?uid-296380-action-viewspace-itemid-118973

vi/vim 基本使用方法
本文介绍了vi (vim)的基本使用方法,但对于普通用户来说基本上够了!i/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、 windows。

vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及 Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。

[简单地,可以使用上下左右方向箭头和delete,backspace键来进行位置移动和删除,不管是命令模式还是插入模式]

1、vi的基本概念
基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
1) 命令行模式command mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。
2) 插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
3) 底行模式(last line mode)
将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。

不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。

2、vi的基本操作
a) 进入vi
在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:$ vi myfile。不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到「插入模式(Insert mode)」再说吧!

b) 切换至插入模式(Insert mode)编辑文件
在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。

c) Insert 的切换
您目前处于「插入模式(Insert mode)」,您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(command mode)」再删除文字。

d) 退出vi及保存文件
在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:
: w filename (输入 「w filename」将文章以指定的文件名filename保存)
: wq (输入「wq」,存盘并退出vi)
: q! (输入q!, 不存盘强制退出vi)

3、命令行模式(command mode)功能键
1). 插入模式
按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。

2). 从插入模式切换为命令行模式
按「ESC」键。

3). 移动光标
vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
按「ctrl」+「b」:屏幕往“后”移动一页。
按「ctrl」+「f」:屏幕往“前”移动一页。
按「ctrl」+「u」:屏幕往“后”移动半页。
按「ctrl」+「d」:屏幕往“前”移动半页。
按数字「0」:移到文章的开头。
按「G」:移动到文章的最后。
按「$」:移动到光标所在行的“行尾”。
按「^」:移动到光标所在行的“行首”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
按「#l」:光标移到该行的第#个位置,如:5l,56l。

4). 删除文字
「x」:每按一次,删除光标所在位置的“后面”一个字符。
「#x」:例如,「6x」表示删除光标所在位置的“后面”6个字符。
「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符。
「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符。
「dd」:删除光标所在行。
「#dd」:从光标所在行开始删除#行

5). 复制
「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:复制#个字到缓冲区
「yy」:复制光标所在行到缓冲区。
「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

6). 替换
「r」:替换光标所在处的字符。
「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

7). 回复上一次操作
「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。

8). 更改
「cw」:更改光标所在处的字到字尾处
「c#w」:例如,「c3w」表示更改3个字

9). 跳至指定的行
「ctrl」+「g」列出光标所在行的行号。
「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

4、Last line mode下命令简介
在使用「last line mode」之前,请记住先按「ESC」键确定您已经处于「command mode」下后,再按「:」冒号即可进入「last line mode」。

A) 列出行号
「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。

B) 跳到文件中的某一行
「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。

C) 查找字符
「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。

D) 保存文件
「w」:在冒号输入字母「w」就可以将文件保存起来。

E) 离开vi
「q」:按「q」就是退出,如果无法离开vi,可以在「q」后跟一个「!」强制离开vi。
「qw」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

5、vi命令列表
1) 下表列出命令模式下的一些键的功能:

h左移光标一个字符
l右移光标一个字符
k光标上移一行
j光标下移一行
^光标移动至行首
0数字“0”,光标移至文章的开头
G光标移至文章的最后
$光标移动至行尾
Ctrl+f向前翻屏
Ctrl+b向后翻屏
Ctrl+d向前翻半屏
Ctrl+u向后翻半屏
i在光标位置前插入字符
a在光标所在位置的后一个字符开始增加
o插入新的一行,从行首开始输入
ESC从输入状态退至命令状态
x删除光标后面的字符
#x删除光标后的#个字符
X(大写X),删除光标前面的字符
#X删除光标前面的#个字符
dd删除光标所在的行
#dd删除从光标所在行数的#行
yw复制光标所在位置的一个字
#yw复制光标所在位置的#个字
yy复制光标所在位置的一行
#yy复制从光标所在行数的#行
p粘贴
u取消操作
cw更改光标所在位置的一个字
#cw更改光标所在位置的#个字
2) 下表列出行命令模式下的一些指令
w filename储存正在编辑的文件为filename
wq filename储存正在编辑的文件为filename,并退出vi
q!放弃所有修改,退出vi
set nu显示行号
/或?查找,在/后输入要查找的内容
n与/或?一起使用,如果查找的内容不是想要找的关键字,按n或向后(与/联用)或向前(与?联用)继续查找,直到找到为止。

完!

二月 21st, 2015

匆匆那年

No Comments, 日记, by tumaotm_122.

It’s possible it could be a hardware issue with the mouse, if you try to drag an icon around on your desktop, does it ever let go? A troubleshooting step you can try is a capacitor drain on the mouse:

 

  • Remove the battery from the mouse.
  • Randomly click on all of the mouse buttons repeatedly for 15 seconds.
  • Reinsert the batteries and test the mouse.

If the problem continues you may want to test it on a second PC, if it happens there then that would confirm it as a hardware issue, in that case please contact support.

 

Logitech Mice

十月 15th, 2014

Pray

No Comments, 日记, by tumaotm_122.
Lord, what have I done wrong? I need you right now.
I need you by my side. I need you to walk with me.
Im vulnerable and fragile.
Im weak.
But I know Im also strong when you are with me.
I know you are always with me and shine the path ahead of me.
Father God, help me. Help me to look at you. Help me to stand up on my feet.
Help me to walk with you. Im a very weak human being but i know you make me strong.
Help me. I prayed to you Lord in te name of Jesus Christ. Amen.
GIS software encompasses a broad range of applications which involve the use of a combination of digital maps and georeferenced data. GIS software can be sorted into different categories.[1]

LaTeX 中经常会碰到绘制表格.

下面通过一个例子来体会 LaTeX 的表格功能.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
\documentclass{article}
\usepackage{multirow}
\begin{document}
LaTeX table example\\
\verb= http:\\www.chinatex.org=\\
\begin{table}[!hbp]
\begin{tabular}{|c|c|c|c|c|}
\hline
\hline
label 1-1 &amp; label 1-2 &amp; label 1-3 &amp; label 1 -4 &amp; label 1-5 \\
\hline
label 2-1 &amp; label 2-2 &amp; label 3-3 &amp; label 4-4 &amp; label 5-5 \\
\hline
\multirow{2}{*}{Multi-Row} &amp; \multicolumn{2}{|c|}{Multi-Column} &amp; \multicolumn{2}{|c|}{\multirow{2}{*}{Multi-Row and Col}} \\
\cline{2-3}
&amp; column-1 &amp; column-2 &amp; \multicolumn{2}{|c|}{}\\
\hline
\end{tabular}
\caption{My first table}
\end{table}
\end{document}

 

保存,编译,看看是什么样子,下面来解释:

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
\documentclass{article}%开始文档
\usepackage{multirow}%使用多栏宏包
\begin{document}%开始文档
LaTeX table example\\
\verb= http:\\www.chinatex.org =\\
\begin{table}[!hbp]%开始表格
%其中参数[!hbp] 的意思是:
%!表示尽可能的尝试 h(here) 当前位置显示表格,
%如果实在不行显示在 b(bottom) 底部,
\begin{tabular}{|c|c|c|c|c|}%开始绘制表格
%{|c|c|c|c|c|} 表示会有5列, 每个的方式未居中(c),
%也可以改成靠左(l)和靠右(r) 其中 | 表示绘制列线
\hline %绘制一条水平的线
\hline %再绘制一条水平的线
label 1-1 &amp; label 1-2 &amp; label 1-3 &amp; label 1 -4 &amp; label 1-5
%这事表格的第一行, 其中5个元素, 用 &amp;隔开.
\hline
label 2-1 &amp; label 2-2 &amp; label 3-3 &amp; label 4-4 &amp; label 5-5 \\
%这事表格的第二行, 其中5个元素, 用 &amp; 隔开.
\hline
%下面这一段有点复杂,参加后面的解释,可以自己修改慢慢体会.
\multirow{2}{*}{Multi-Row} &amp; \multicolumn{2}{|c|}{Multi-Column} &amp; \multicolumn{2}{|c|}{\multirow{2}{*}{Multi-Row and Col}} \\
%上面开始两行合并, 然后又是正常的两列合并, 接下来是两行两列合并
\cline{2-3} %绘制第2列和第3列的横线
&amp; column-1 &amp; column-2 &amp; \multicolumn{2}{|c|}{}\\
%补偿上面的两列合并的那一行
\hline
\end{tabular}
\caption{My first table} %表格的名称
\end{table}
\end{document}

其中,multirow{2}{*}{text}的第一个参数表示行的数目,*表示由系统自动调整文字,text表示要写入的文字

multicolumnmulticolumn类似,功能是跨多列, \multicolumn{2}{|c|}{text}表示跨2行,文字采用中心对齐的方式,text是要写入的文字。

multicolumnmultirow可以组合使用,跨多行多列,只需要将multirow作为multicolumntext即可。

最后,\cline用于画横线 \cline{i-j}表示从第i列画到第j列.

自定义命令:

让表格中的单元格换行

1
2
3
4
5
6
7
8
9
10
11
\newcommand{\tabincell}[2]{\begin{tabular}{@{}#1@{}}#2\end{tabular}}
%然后使用&\tabincell{c}{}&就可以在表格中自动换行
 
%比如这么用
\begin{tabular}{|c|c|}
\hline
1 & the first line \\
\hline
2 & \tabincell{c}{haha\\ heihei\\zeze} \\
\hline
\end{tabular}

FAQ:

The table is created, there is no error message and the footnote numbering appears in the table but there is no footnote text at the bottom of the table.
Can somebody explain me how?
How can I solve the problem?

Move the \footnotetext commands outside the table environment; this however will cause the footnotes to appear at the bottom of the page (as the first table in my example below shows); if you want the footnotes to appear right after the table, then you could use the threeparttable package (have a look at the second table in my example code).

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
\documentclass{article}
\usepackage{threeparttable}
 
 
\begin{document}
 
%A table with footnotes appearing at the bottom of the page:
\begin{table}
  \centering
  \begin{tabular}{llll}
  \hline
  column 1 & column 2 & column 3\footnotemark[1] & column 4\footnotemark[2] \\
  \hline
  row 1 & data 1 & data 2 & data 3 \\
  row 2 & data 1 & data 2 & data 3 \\
  row 3 & data 1 & data 2 & data 3 \\
  \hline
  \end{tabular}
  \caption{Table with footnotes at the bottom of the page}
  \label{tab:test1}
\end{table}
\footnotetext[1]{table footnote 1}
\footnotetext[2]{table footnote 2}
 
\clearpage
 
%A table with footnotes appearing at the bottom of the table:
\begin{table}
  \centering
  \begin{threeparttable}[b]
  \caption{Table with footnotes after the table}
  \label{tab:test2}
  \begin{tabular}{llll}
  \hline
  column 1 & column 2 & column 3\tnote{1} & column 4\tnote{2} \\
  \hline
  row 1 & data 1 & data 2 & data 3 \\
  row 2 & data 1 & data 2 & data 3 \\
  row 3 & data 1 & data 2 & data 3 \\
  \hline
  \end{tabular}
  \begin{tablenotes}
    \item[1] tablefootnote 1
    \item[2] tablefootnote 2
  \end{tablenotes}
 \end{threeparttable}
\end{table}
 
\end{document}

We can get the tools bundle including the tabularx package, which are also support show the footnotes in the table.

In windows environment, we can using console to compile this bundle.

1
Latex tools.ins
1
\usepackage {tabularx}

六月 3rd, 2013

2013-6-1 Doors Open Ottawa

No Comments, 旅行日记, 日记, by tumaotm_122.

今天是六一儿童节,一大早就送兔子去市中心的考场。6点起床,7点出门。上车以后终于学会了如何使用公交票。一联七块八的票换来一张Day Pass。把兔子送到考场已经7点40了。Ottawa Convention Center真高端。正好放了个大号。舒服极了。

二月 3rd, 2013

How to get startup ideas

1 Comment, 网文转载, 读书笔记, by tumaotm_122.

November 2012

From: http://www.paulgraham.com/startupideas.html

 

The way to get startup ideas is not to try to think of startup ideas. It’s to look for problems, preferably problems you have yourself.

The very best startup ideas tend to have three things in common: they’re something the founders themselves want, that they themselves can build, and that few others realize are worth doing. Microsoft, Apple, Yahoo, Google, and Facebook all began this way.

More

2012-12-25 晴

早晨8点半就被闹钟吵醒了,旅店里的设施很差,没有拖鞋,没有牙刷、牙膏。被旅店摆了一道,晓宁说打电话问过了,旅店答复什么都有,结果来了发现还是什么都没有。

幸亏昨晚买了一瓶漱口水,和兔子能够公用一下,不至于没有牙膏用。看着毛巾也是脏乎乎的。总体感觉不太爽。这个旅店应该是由几栋Town House组成的,昨晚看了下,除了我们7个人好像没有别的房客了。圣诞节这么好的时候生意如此冷清,真让人捉摸不透,昨晚回来的时候发现前台已经没有人了,感觉好奇怪。问了晓宁才知道这群人已经跑回家过年了,把一整栋旅店扔给我们7个中国人自治了。可惜回到旅店的时候实在太累,也没有什么心情蹦达了,早早就寝了。

More

2012-12-24 晴

早晨5点半就起床了。发现兔子已经在卫生间洗漱了。昨晚窗外的除雪车在外面轰鸣了了一夜,不胜其扰,加上兔子整夜看电影,大灯正好照到我,所以三点多才真正睡着。

More

最近爬虫凶猛,不胜其扰。

Table of contents:

Status of this document

This document represents a consensus on 30 June 1994 on the robots mailing list (robots-request@nexor.co.uk), between the majority of robot authors and other people with an interest in robots. It has also been open for discussion on the Technical World Wide Web mailing list (www-talk@info.cern.ch). This document is based on a previous working draft under the same title.

It is not an official standard backed by a standards body, or owned by any commercial organisation. It is not enforced by anybody, and there no guarantee that all current and future robots will use it. Consider it a common facility the majority of robot authors offer the WWW community to protect WWW server against unwanted accesses by their robots.

The latest version of this document can be found onhttp://www.robotstxt.org/wc/robots.html. More

十二月 11th, 2012

2012-12-10 冻雨

No Comments, 日记, by tumaotm_122.
记得老师说过,渥太华最可怕的天气不是雪,是冻雨。今天终于体会到了,出门的时候刺骨的冰雨,裹着风向你扑来,其实天气并不太冷,我穿了一条薄秋裤就足以应付今天的温度。

因为今天有监考,所以早早的来到车站等公交,路上厚厚的一层冰水混合物,踩上去嘎吱嘎吱做响。路很滑,刚走出公寓大门,就是一个趔趄。不过感觉渥太华人已经安之若素了。每名行人在冻雨中都是按正常的步速行进。唯一的区别可能就是要不时的看看脚下。