开发工具(git, svn, screen, tmux) & IDE快捷键(Vim, Jetbrains, etc.)速查手册

值得尝试的新工具

  • ag: 比grep、ack更快的递归搜索文件内容。
  • mycli: mysql客户端,支持语法高亮和命令补全,效果类似ipython,可以替代mysql命令。
  • shellcheck: shell脚本静态检查工具,能够识别语法错误以及不规范的写法。
  • cloc: 代码统计工具,能够统计代码的空行数、注释行、编程语言。

VS Code

  • 列模式: shift + option + ↕️
  • 快速打开: ⌘ + P
  • 连续选中光标所在的单词: ⌘ + D

Sublime Text

Shortcut key

  • ⌘ + P: 快速打开文件
  • ⌘ + R: 打开纲要列表
  • ⌘ + D/G: 同步编辑/类似vim # and *
  • ⌘ + M: 括号跳转
  • ⌘ + F: Enter查找下一个,Shift + Enter查找上一个
  • ⌘ + X: 删除当前行
  • ⌘ + L: 选择整行, 按住⌘继续按L则持续选择
  • ⌘ + Shift + L: 多行选中后, 同时编辑这些行
  • ⌘ + 左键点击: 多处同时编辑
  • Ctrl + G: 跳转到行
  • Shift + Tab: 折叠, 在看很长的Markdown文档时有用

Plugin

IntelliJ IDEA

Editing(编辑)

  • Alt + Enter : 显示建议/导入包 ⭐️
  • Control + Space : 基本的代码补全(补全任何类、方法、变量) ⭐️
  • ⌘ + J : 插入自定义动态代码模板
  • ⌘ + Alt + J : 弹出模板选择窗口,将选定的代码使用动态模板包住
  • ⌘ + Alt + T : 把代码用if, for等代码块包起来(当前行或选定的行)
  • Ctrl + Alt + O : 优化import ⭐️
  • ⌘ + Alt + L : 格式化代码 ⭐️
  • ⌘ + / : 注释/取消注释与行注释
  • ⌘ + 加号 : 展开当前代码块
  • ⌘ + 减号 : 折叠当前代码块
  • ⌘ + Shift + 加号 : 展开所有代码块
  • ⌘ + Shift + 减号 : 折叠所有代码块

Search/Replace(查询/替换)

  • Shift + Shift: Search anywhere ⭐️
  • Ctrl + N, Ctrl + Shift + N: 查找类, 查找文件
  • Ctrl + F, Ctrl + Shift + F: search
  • F2Shift+F2: 上个/下个错误
  • F3Shift+F3: 上个/下个查找
  • Alt + F7: find usage

Navigation(导航)

  • ⌘  +  Alt + ←/→: Navigate back/forward
  • ⌘ + E : 显示最近打开的文件记录列表
  • ⌘ + F12: 弹出当前文件结构
  • Ctrl + H : 显示类的继承层级(列出上下继承结构) ⭐️
  • ⌘ + Shift + H: 显示方法继承层级(例如显示某个抽象类的所有实现) ⭐️
  • Ctrl +  Alt + H: 显示调用层次结构 ⭐️

VCS/Local History(版本控制/本地历史记录)

  • Command + K : 提交代码到版本控制器 ⭐️

Refactoring(重构)

  • Shift + F6: 重构

UI(界面)

  • ⌘ + 1 : Project
  • ⌘ + 7 : Structure
  • ⌘ + 8 : Hierarchy
  • ⌘ + 9 : Version Control

插件

  • Lombok
  • Code iris: 显示类的Diagrams
  • mongo4idea

Android Studio

  • 格式化代码 ⌘ + Option + L Ctrl + Alt + L
  • 删除行 ⌘ + Delete Ctrl + Y
  • 快捷生成结构体 ⌘ + Option + T Ctrl + Alt + T
  • 快捷覆写方法 ⌘ + O Ctrl + O
  • 快捷定位到行首/尾 ⌘ + Left/Right Ctrl + Left/Right
  • 文件方法结构 ⌘ + F12 Ctrl + F12
  • 查找调用的位置 Ctrl + Option + H Ctrl + Alt + H

PHPStorm(Win)

  • Ctrl + j 常用的代码片段
  • Ctrl + Alt + 左右方向键,定位到上一次编辑的位置
  • Ctrl + F12,快速查看当前文件的所有方法
  • Ctrl + Alt + L,格式化代码
  • Ctrl + N,根据类名称查找
  • Ctrl + Shift + N,根据文件名查找

Eclipse(Win)

快捷键

  • Alt+/: 补全
  • Ctrl+1: 快速修复建议
  • Ctrl+D: 删除当前行
  • Ctrl+Del: 删单词, 类似VIm的daw
  • Ctrl+E: 打开的标签之间切换
  • Ctrl+M: 最大化当前的Edit或View, 配合F12(编辑窗口获得焦点), 可以立刻最大化代码编辑栏
  • Ctrl+L: 定位在某行
  • Ctrl+K: 选中的单词, 相当于Vim的#, 反向Ctrl+Shift+K
  • Ctrl+Q: 定位到最后编辑的地方
  • Ctrl+O: 快速显示 OutLine
  • Ctrl+T: 快速显示当前类的继承结构
  • Ctrl+Shift+P: 匹配括号
  • Ctrl+Shift+G: 查找调用
  • F2: 显示提示
  • F3: 跳转定义
  • F4/Ctrl+O: 打开继承, 只能看extends, 不能看implements
  • Ctrl+H: 搜索
  • Ctrl+Alt+H: 调用
  • Ctrl+Shift+R: 搜索工程中的资源文件
  • Ctrl+Shift+T: 搜索类(包括工程和关联的第三jar包)
  • Alt+Shift+R: 自动的重命名一个类
  • Alt+Shift+I: 自动内联选中的属性/方法
  • Alt+Shift+j: 插入当前类/方法的注释
  • Ctrl+/ : 对选中的部分进行注释
  • Ctrl+Shift+/: 对选中的部分块状注释
  • Ctrl+Shift+F: 格式化代码
  • Ctrl+Shift+P: 匹配括号

插件

  • m2e
  • Egit

terminal(终端)

  • Ctrl – a :移到行首
  • Ctrl – e :移到行尾

vim

移动/跳转光标:

  • H J K L: ← ↓ ↑ →
  • 0 : 移动光标至本行开头
  • $ : 移动光标至本行结尾
  • w : 移动到下个单词( a.Properties算两个单词)
  • W : 移动到下个单词(空格分隔的单词)
  • 3w : 光标向前移动3个单词
  • b : 移动到上个单词, 如同w
  • B : 移动到上个单词, 如同W
  • gg : 移动到第一行
  • G : 移动到最后一行
  • :133 : 跳到第133行
  • g; 在最近所有修改处跳转
  • '. 跳转到最后修改的那一行

编辑:

  • i : 在当前光标前面插入
  • I : 在当前单词开头插入
  • a : 在当前光标后面插入
  • A : 在当前单词尾部插入
  • x : 删除光标处字母
  • d0 : 删除到行首
  • d$ : 删除到行尾
  • dd : 删除光标所在行
  • dw : 删除光标所在单词
  • >> : 增加缩进
  • << : 减少缩进

搜索:

  • fX : 在本行搜索X
  • FX : 在本行搜索X(向后搜索)
  • /Word : 全文搜索
  • ?Word : 全文搜索(向后)

粘贴/复制:

  • y : 复制选中的
  • yy : 复制整行
  • p : 粘贴
  • "+y : 复制到+寄存器
  • "+p: 粘贴+寄存器的内容

补全:

  • CTRL + N: 智能补全
  • CTRL + X , CTRL + K : 根据字典补全
  • CTRL + X , CTRL + U : 用户自定义补全
  • CTRL + X , CTRL + F : 文件名补全

其他:

  • v : 进入选择模式
  • Shift + v : 进入选择模式(行)
  • Ctrl + v : 进入选择模式(列)

vimdiff

  • 启动: vimdiff file1 file2
  • 前一个: [ + C
  • 后一个: ] + C
  • 在窗口间切换: CTRL + W W
  • 将当前复制到另一个: dp, dp 意为 diff “put” , 也可以使用命令:diffput
  • 将另一个复制到当前: do, do 意为 diff “obtain” , 也可以使用命令:diffget, 之所以不用dg,是因为dg已经被另一个命令占用了
  • 重新比较: :diffupdate

git

stash

  • git stash: 暂存没有add的修改
  • git stash list: 查看已经暂存的
  • git stash apply: 应用暂存的修改到当前分支

检出,分支,合并:

  1. git clone 检出代码:

    • 显示remote:(origin是远程库的名字)
    • git remote -v 查看可以抓取和推送的origin的地址
    • git remote show origin, 比上面的更详细, 可以看到git pull/push到的默认是哪个分支.
    • git branch, 查看本地是哪个分支.
  2. git checkout -b issue3 origin/master, 从远端的master分支创建一个自己的分支issue3

    • 创建本地分支:git branch [name] —-只创建,不会自动切换分支
    • 切换分支:git checkout [name]
    • 创建新分支并立即切换到新分支: git checkout -b [name]
      • 这时候再用git branch查看当前分支会显示是issue3分支.
      • 如果这时候git pull从服务器拉新代码, 会失败并提示服务端的分支(master/test/develop)没有和本地的issue3对应.
        需要用git branch --set-upstream-to=origin/master issue3设置远端的master和本地的issue3分支连接.
        全部修完完成, 准备merge:
  3. 修改完后 合并源分支(issue3) 到远程目标分支(develop):

    • git pull --rebase // merge 前先pull(更新dev), 如果先merge再pull, 会导致把pull下来的代码也当作自己修改的merge上去
    • git checkout master // 切换到目标分支
    • git merge --no-ff issue3
    • git push origin本地分支名:远程分支名
    • 如果merge时出现冲突,

      • (4) 修改冲突文件, 然后重新git add confilct_file(重新staged), 将把它们标记为已解决状态(译注:实际上就是来一次快照保存到暂存区域)。因为一旦暂存,就表示冲突已经解决。
      • (5) 然后不要忘了: git commit -m "conflict fixed"
      • (6) 解决完冲突, push上去git push origin master
  4. git rebase替代merge, (issue3)到远程目标分支(master):

    • 切换到私有分支, 然后 git rebase master // 变基到master
    • 如果有有冲突:
      • (1) 修改冲突的文件, 然后 git add file
      • (2) 不用commit而是 rebase –continue: git rebase --continue
    • git checkout master
    • git merge issue3
  5. Merge后, 撤销此次Merge : git rebase --skip (可能多次)

  6. 删除本地分支:
    git branch -d branch_name # 如果这个分支没有被merge,git会提示
    git branch -D branch_name # -D就是强行删除

  7. 如需要删除远程分支: git push origin --delete rc3

撤销和回滚:

  • 修改了文件, 但还没有git add: 输入git status, 会提示用git checkout -- file丢弃工作区, 文件回到服务器状态;
  • 修改并add了README.md, 还没有commit, 输入git status, 提示use git reset HEAD filename to unstage;
  • 已经commit/已经merge: git log -p -n 3 查看最近3次历史, 记录下commit的哈希值, 然后执行 git reset --hard commit_hashid
  • 已经push:

    • git reflog 查看 commit_hashid
    • git reset --hard commit_hashid
    • git push -f
    • 我们是要把本地的修改强制推送到远程分支上,在强推mster的可能会报错,意思是没有权限之类的错误,报错如下。

      remote: GitLab: You don't have permission
      To git@10.255.223.213:code-ddreader/media-hapi.git
      ! [remote rejected] master (pre-receive hook declined)
      • 是因为master分支一般会成为保护分支,所以我们首先要去除master为保护分支,才可以强推。

参考

查看git历史

  1. 还没add: git stauts啦…
  2. add了还没commit: 仍然可以git stauts啦…
  3. 已经commit/push了: git log -p -n 2 解释: -p 显示详细内容修改, -n 2显示最后两次的更改

有用的alias设置:

git config --global alias.pr "pull --rebase --no-ff"  #
git config --global alias.mg "merge --no-ff" # --no-ff 不使用快照合并
git config --global alias.ca "commit -a"

以及: git config --global core.autocrlf false 使用LR而不是Win系统的CRLF

当你把git弄的一团糟时

svn

  • svn add file
  • svn commit -m “xxx” #提交修改
  • svn up #更新到最新版本
  • svn revert file #没commit时的撤销
  • svn log
  • svn merge -r 28:25 file #从当前28回滚到25

screen

Screen一个”会话”包括若干Windows, 每个Windows可被分割, 每个分割的区域可再创建新的Window

QuickStart

  • screen -ls 查看已有的session
  • screen -r id 连接已有的session
  • screen -S xx 创建xxx为名字的session
  • c-a " 查看已打开的shell
  • c-a S 上下分割当前Window, 分割出来的新Window没有运行任何Shell
  • c-a Tab 切换到新Windows
  • c-a c 创建新shell
  • c-a " 查看&切换已经打开的shell
  • c-a d 保存session并退出
  • c-a k 杀死Window, 不可恢复

Window

  • c-a c: 创建一个window
  • c-a ": 查看已创建的windows列表
  • c-a d: deattach 整个会话, 所有Windows
  • c-a k: 关闭当前windos
  • c-a Tab: 切换
  • c-a n/p: switch
  • c-a 0~9: 按序号切换到window

Split

  • c-a S : 上下分割, c-a tab移动到下面的窗口, 然后c-a c创建新的
  • c-a | : 垂直分割

翻页&复制

  • c-a [: 进入复制模式, 之后可以像vim里一样操作h j k l, ctrl-b, ctrl-f, 翻页
  • 进入复制模式后, 空格开始选择, 空格结束

Session

  • screen -S test1 : 创建名为test1的会话
  • screen -ls : 查看deattach的会话
  • screen -r id : 重新连接
  • screen -d -r id : 如果上面的命令提示已经attach, 可以加-d参数先deattachattach
  • screem -X -S session_id quit : 退出session, -X参数是执行的意思,执行quit命令.
  • rm -rf /var/run/screen/S-xxx : 删除会话

tmux

  • tmux new-session -s “sessionX” 创建会话
  • tmux attach -t sessionX 恢复会话
  • c-b d : 再输入tmux attach可以恢复会话
  • c-b “ : 上下新建一个面板
  • c-b % : 左右新建一个面板
  • c-b 方向 : 面板切换
  • c-b Page : 进入翻页模式,此模式下可以用翻页键,q是退出翻页模式
  • c-b: (注意冒号)输入setw mode-mouse on 设置鼠标滚轮
  • [ 复制模式
  • ] 粘贴模式

phpstorm font setting

neovim on windows

choco sources add -source https://www.myget.org/F/equalsraf/ -name equalsraf
choco install -pre neovim-qt


Eclipse Color Theme

http://www.eclipsecolorthemes.org/?view=theme&id=1115
AbstractTextEditor.Color.SelectionBackground=147,161,161
AbstractTextEditor.Color.SelectionForeground=7,54,66
Preferences -> General -> Editors -> Text Editors -> Annotations: Occurrences and Write occurrences 改为”Box”