0%

使用xshell的时候发现tmux的pane大小只能左右调节不能上下调节,后台发现xshell不响应ctrl+up和ctrl+down快捷键,只能自己设置快捷键。

两个组合键输出的特殊字符是[1;5A[1;5B,但是在开头还隐藏了一个代表esc的特殊字符\033。xshell工具->选项->键盘和鼠标->编辑->新建,按对应快捷键,类型选择发送字符串,粘贴以下对应的字符串,完成。

阅读全文 »

命令行

tmux new[-session] -s $session_name -d 新建会话(-d 是否在后台)
tmux new -s name -n $window_name 新建会话及窗口
tmux at[tach] -t session 重新连接(-t 后接会话名称)
tmux ls 显示保存的会话
tmux kill-session -t $session_name 删除会话
阅读全文 »

NERD tree 配置

使用F2快速展开或隐藏它打开vim时自动展开NERDTree

1
autocmd vimenter * if !argc() | NERDTree | endif

如果窗口除了NERDTree没有其他文件时,自动关闭,可以减少多次按:q

1
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif
阅读全文 »

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
v:按字符选择。经常使用的模式,所以亲自尝试一下它。

V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。

一、移动光标
1、左移h、右移l、下移j、上移k
2、向下翻页ctrl + f,向上翻页ctrl + b
3、向下翻半页ctrl + d,向上翻半页ctrl + u
4、移动到行尾$,移动到行首0(数字),移动到行首第一个字符处^
5、移动光标到下一个句子 ),移动光标到上一个句子(
6、移动到段首{,移动到段尾}
7、移动到下一个词w,移动到上一个词b
8、移动到文档开始gg,移动到文档结束G
9、移动到匹配的{}.().[]处%
10、跳到第n行 ngg 或 nG 或 :n
11、移动光标到屏幕顶端H,移动到屏幕中间M,移动到底部L
12、读取当前字符,并移动到本屏幕内下一次出现的地方 *
13、读取当前字符,并移动到本屏幕内上一次出现的地方 #

二、查找替换
1、光标向后查找关键字 #或者g#
2、光标向前查找关键字 *或者g*
3、当前行查找字符 fx, Fx, tx, Tx
4、基本替换 :s/s1/s2 (将下一个s1替换为s2)
5、全部替换 :%s/s1/s2
6、只替换当前行 :s/s1/s2/g
7、替换某些行 :n1,n2 s/s1/s2/g
8、搜索模式为 /string,搜索下一处为n,搜索上一处为N
9、制定书签 mx, 但是看不到书签标记,而且只能用小写字母
10、移动到某标签处 `x,1旁边的键
11、移动到上次编辑文件的位置 `.

PS:.代表一个任意字符 *代表一个或多个字符的重复
正则表达式的内容将会在后续文章中整理

三、编辑操作
1、光标后插入a, 行尾插入A
2、后插一行插入o,前插一行插入O
3、删除字符插入s, 删除正行插入S
4、光标前插入i,行首插入I
5、删除一行dd,删除后进入插入模式cc或者S
6、删除一个单词dw,删除一个单词进入插入模式cw
7、删除一个字符x或者dl,删除一个字符进入插入模式s或者cl
8、粘贴p,交换两个字符xp,交换两行ddp
9、复制y,复制一行yy
10、撤销u,重做ctrl + r,重复.
11、智能提示 ctrl + n 或者 ctrl + p
12、删除motion跨过的字符,删除并进入插入模式 c{motion}
13、删除到下一个字符跨过的字符,删除并进入插入模式,不包括x字符 ctx
14、删除当前字符到下一个字符处的所有字符,并进入插入模式,包括x字符,cfx
15、删除motion跨过的字符,删除但不进入插入模式 d{motion}
16、删除motion跨过的字符,删除但不进入插入模式,不包括x字符 dtx
17、删除当前字符到下一个字符处的所有字符,包括x字符 dfx
18、如果只是复制的情况时,将12-17条中的c或d改为y
19、删除到行尾可以使用D或C
20、拷贝当前行 yy或者Y
21、删除当前字符 x
22、粘贴 p
23、可以使用多重剪切板,查看状态使用:reg,使用剪切板使用”,例如复制到w寄存器,”wyy,或者使用可视模式v”wy
24、重复执行上一个作用使用.
25、使用数字可以跨过n个区域,如y3x,会拷贝光标到第三个x之间的区域,3j向下移动3行
26、在编写代码的时候可以使用]p粘贴,这样可以自动进行代码缩进
27、 >> 缩进所有选择的代码
28、 << 反缩进所有选择的代码
29、gd 移动到光标所处的函数或变量的定义处
30、K 在man里搜索光标所在的词
31、合并两行 J
32、若不想保存文件,而重新打开 :e!
33、若想打开新文件 :e filename,然后使用ctrl + ^进行文件切换

四、窗口操作
1、分隔一个窗口:split或者:vsplit
2、创建一个窗口:new或者:vnew
3、在新窗口打开文件:sf {filename}
4、关闭当前窗口:close
5、仅保留当前窗口:only
6、到左边窗口 ctrl + w, h
7、到右边窗口 ctrl + w, l
8、到上边窗口 ctrl + w, k
9、到下边窗口 ctrl + w, j
10、到顶部窗口 ctrl + w, t
11、到底部窗口 ctrl + w, b

五、宏操作
1、开始记录宏操作q[a-z],按q结束,保存操作到寄存器[a-z]中
2、@[a-z]执行寄存器[a-z]中的操作
3、@@执行最近一次记录的宏操作

六、可视操作
1、进入块可视模式 ctrl + v
2、进入字符可视模式 v
3、进入行可视模式 V
4、删除选定的块 d
5、删除选定的块然后进入插入模式 c
6、在选中的块同是插入相同的字符 I<String>ESC

七、跳到声明
1、[[ 向前跳到顶格第一个{
2、[] 向前跳到顶格第一个}
3、]] 向后跳到顶格的第一个{
4、]] 向后跳到顶格的第一个}
5、[{ 跳到本代码块的开头
6、]} 跳到本代码块的结尾

八、挂起操作
1、挂起Vim ctrl + z 或者 :suspend
2、查看任务 在shell中输入 jobs
3、恢复任务 fg [job number](将后台程序放到前台)或者 bg [job number](将前台程序放到后台)
4、执行shell命令 :!command
5、开启shell命令 :shell,退出该shell exit
6、保存vim状态 :mksession name.vim
7、恢复vim状态 :source name.vim
8、启动vim时恢复状态 vim -S name.vim

场景

500G 硬盘

100MB `boot`分区 |8G `swap`分区 |450G `/`分区

我需要将/home分区单独提取一个分区出来,即变成

100MB `boot`分区 |8G `swap`分区 |100G `/`分区 |350G `/home`分区

步骤

  1. sudo e2fsck -fy /dev/sda3 // f 是表示检查,y表示一直确认,直到修复完
  2. sudo resize2fs /dev/sda3 100G //将文件系统调整到50G(不太明白文件系统大小和分区大小的关系)
  3. sudo fdisk /dev/sda // 使用fdisk进行分区
  4. 首先输入p,查看要调整分区(sda3)的start序号(重要)
  5. 输入 d 删除要sda3,选择3
  6. 输入 n 添加一个主分区,分区号选择3
  7. 选择start地址,就是刚才查看的地址(一般不用修改,默认就是刚才的值)
  8. 选择分区容量,输入+100G
  9. 然后再新建一个分区,输入n,选择p(主分区),选择默认起点,再选择默认终点
  10. 按w保存分区表
    1. 这里有可能会报错,什么device被占用之类的错误
    2. 使用 partprobe /dev/sda命令重载/dev/sda 重载分区表,(命令成功界面没有显示)
  11. sudo e2fsck -fy /dev/sda3 修复sda3分区
  12. sudo resize2fs /dev/sda3 检查一下有没有问题
  13. sda3分区已经没有问题了,数据全部都保留着。
  14. 格式化sda4 sudo mkfs.ext4 /dev/sda4
  15. 然后就是迁移所有/home数据到sda4
  16. 在fstab中添加一行 UUID=xxxxxxxxxxxxxxx /home ext4 defaults 0 0
  17. 开机后使用sudo chown -R username:username /home/fan,否则由于权限问题导致无法登录
阅读全文 »

需求

使用linux离不开ss,每次都需要手动输入命令开启,很麻烦,所以需要创建开机就启动的服务。

前提

假设我们有一段需要开机启动的服务脚本/home/username/document/ss-local.sh如下

1
ss-local -c /home/username/document/ssconfig.json
阅读全文 »

题目

有猜数字游戏如下

庄家预先写下一个四位数字(每位数字各不相同),玩家每次随机猜一个数字,庄家告知玩家猜对了几A几B(A代表数字和位置都相同,B代表包含该数字但位置不同,比如如果庄家写的是3514,玩家猜的是3165,庄家会回答1A2B),玩家继续猜,直到猜中为止。如果超过5轮没猜中,则玩家输,否则玩家赢。请为玩家设计一个猜数字的算法,确保玩家能够大概率胜。

例如:庄家写下9876,玩家第一次猜0123,庄家回复0A0B;玩家继续猜4567,庄家恢复0A2B;依次下去,知道玩家猜中9876为止。

阅读全文 »

以下这张图,基本解释了所有的原型关系

image.png

核心要素是:

1
2
3
4
5
var Foo = function (){}
var foo = new Foo()
foo.__proto__ == foo.constructor.prototype == Foo.prototype

// .__proto__ 可以简单理解成 .construstor.prototype 的简写
阅读全文 »