-->

Neater

Be A Warrior, Not A Worrier

Mac Tips

Mac下打开最近访问项

1
⌘ + ⇥ 切换App的时候,⌘不放,再按↑,将会显示该App最近打开的文件。使用↑↓←→进行选择,按 ↩ 打开。

虽然CMD中有很多快捷键,但无法大范围移动光标,OS X 下,按住option,然后鼠标点击当前行,光标会移动到该处。

键盘操控对话框

以未保存对话框为例

  • 回车 —> Save
  • ⌘ + . –> Cancel
  • ⌘ + Del –> Delete
  • ⌘ + ⇧ + H –> 跳转至主目录
  • ⌘ + D –> 跳转至桌面
  • ⌘ + ⇧ + G –> 输入要跳转的路径,按 ⇥ 自动补全。

Xcode技巧

Edit all in Scope

适合进行大批量的修改变量和方法;选定一个想要修改的字符串,然后选择Edit-Edit all in Scope,然后在你输入的时候,所有该字符出现的地方都进行同步更改。

在文件上执行‘Command + Option + Shift + Left-click’操作,该组合键可展示一个小尺寸的弹出视图,可以查看你想要打开它的地方,比如辅助编辑器、标签或者窗口等。

CTRL + 1,该快捷键可打开’Show Related Items‘弹出菜单’。倘若你已经将光标放在了任何方法中,并点击‘CTRL + 1 ’就可以很方便地通过弹出的视图访问该方法的所有调用者和被调用者。

Command + Shift + J快捷操作,可展示当前你在工程导航器中打开的文件

文档和参考: Command + Shift + 0

在辅助编辑器中打开文件:在项目导航器中选中文件执行Option+左键点击操作

option+点击Project Navigator中选中的文件:在辅助编辑窗口中打开选中文件。

option+command+点击Editor中选中的符号:在辅助编辑窗口中打开符号定义(jump to definition in assistant editor)。

option+control+command+↑/↓:在辅助窗口中打开对应的头文件(.h)/实现文件(.m,.mm,.cc)。

若在按下option的同时按下shift通常会出现一个导航窗格,可选择在new window/tab/assistant-editor显示打开。

真机截屏

1
2
debug -> viewDebugging -> Take sceencast of Active Devics,
即使当前程序没有运行,也可以直接截取手机上的图片直接到桌面。

另外Show View Frams和Show Alignment Rectangles,也可显示视图边框和对齐矩形,方便UI调试。如下图

view frame

__unused关键字,用来suppress 那种讨厌的unused parameter warning.

__unused int i;

NSLog(@“%@”,@(array.count));

ViewController瘦身之 抽取View Logic

面对日益臃肿的ViewController,测试、重构、增加新的需求将越来越困难,怎么破?

通常我们会在ViewController里加载并控制View(通过Xib或者loadView方法),这样VC就会关心View的内部细节,如layout、Animation、如何填充、响应子视图的事件等,使VC更难以理解,而且增加了和View的耦合。

VC主要负责与用户的交互,主要是控制内部View以及用户操作时产生的事件,而不是用来实现View,如果View使用了UITableView或者UICollectionView,那么VC不得不关心View的内部细节,就像一只冲出牢笼的野兽,变得难以驾驭,应该避免这样。

下面是如何设计View的实践:

为Views创建Class

首先,为Views创建类,它封装了View的所有内部细节,并为VC提供抽象接口,用来提供改变View状态的方法或者获得其内部信息,这样一来,VC实现了与View的解耦,不用关心View的内部实现,只需要访问View提供的接口即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#import <UIKit/UIKit.h>
@class JPLoginViewModel;

@interface JPLoginView : UIView

@property (strong, nonatomic) JPLoginViewModel *viewModel;

- (void)showAppearanceAnimation;
- (void)showNoConnectionFeedback:(BOOL)shouldShow;

@end

@interface JPLoginViewModel : NSObject

@property (strong, nonatomic) NSString *userName;
@property (strong, nonatomic) NSString *password;

@end

可以看出,这个.h文件没有IBOutlets和subViews的信息,因为他们都是内部细节;如果不这样的话,VC将能访问这样内部细节,设想将来你想使用UITextFields和UILabels,而不是现在的UITableView来显示login和password,修改VC将是无法避免的。

CMD Tricks

删除一个大文件

1
2
/path/to/file.log (清空)
rm /path/to/file.log

变量CDPATH定义了目录的搜索路径

cd */var/www/html/ 这样长了,我可以直接输入下面的命令进入 /var/www/html

1
2
export CDPATH=/var/www
cd html

输出文件的指定行

1
sed -n 'x,yp' file;   awk 'NF > x && NF > y' file

从x行开始,输出y行

1
tail +x file | head -y

head和tail 参数 -n的不同:

  • head -n -10 除去最后10行
  • tail -n +10 从第10行开始
  • tail -n 1000:显示最后1000行;
  • tail -n +1000:从1000行开始显示,显示1000行以后的
  • head -n 1000:显示前面1000行

从第3000行开始,显示1000行。即显示3000~3999行

1
cat filename | tail -n +3000 | head -n 1000

显示1000行到3000行

1
cat filename| head -n 3000 | tail -n +1000

Mac下获取UDID

1
2
3
4
5
ioreg -w 0 -rc IOUSBDevice -k SupportsIPhoneOS | sed -n 's/.*USB Serial Number[^0-9a-z]*\([0-9a-z]*\).*/\1/p'

system_profiler SPUSBDataType | sed -n -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'

system_profiler SPUSBDataType | grep "Serial Number:.*" | sed s#".*Serial Number: "##

清空文件

1
2
3
> filename

cat /dev/null > filename

给机器增加Load

1
cat /dev/nll/unandom | gzip -9 > /dev/null & 

使用pgrep查找进程id,而不用 ps -ef | grep XXX


echo $0,当前使用的 shell

vim打开剪贴板内容

1
2
alias vipb='xclip -selection clipboard -o | vim -' // Linux
alias vipb="pbpaste | vim -"  // Mac

显示sqlite文件内容

1
sqlite3 -line database.db 

修改SSH的RSA密码短语

1
ssh-keygen -f ~/.ssh/id_rsa -p 修改SSH的RSA密码短语

man -w/—path

1
打印相关帮助文档的位置

使用-i参数默认的前面输出用{}代替,-I参数可以指定其他代替字符,如例子中的[]

1
find . -name "file" | xargs -I [] cp []

查看某个选项的当前值

1
:set option?

Readline Key Bindings(man bash中的查找字段)

键盘宏命令

  • 开始录制宏 ctrl + x (
  • 结束录制宏 ctrl + x )
  • 运行宏 ctrl + x e

其他命令

  • 显示当前shell的版本信息 ctrl + x ctrl + v
  • 设置标记 ctrl + @
  • 交换标记和光标的位置: ctrl + x ctrl + x
  • 启动编辑器编辑命令,编辑完成后执行 ctrl + x ctrl + e
  • 撤销前面的操作 ctrl + x ctrl + u
  • 重新读取配置文件 ctrl + x ctrl + r

Vimperator

y: 复制当前页的url到剪贴板。Y:复制选中文字到剪贴板

B显示书签列表

:map B :dia bookmarks

Shell 随机数

echo $RANDOM

使用echo检查命令要操作的文件

echo ls * echo rm *.txt

dryrun

很多命令支持 dryrun(testing),即 -n,作用与上面提到的 echo 相似

撤销之前一次编辑操作

ctrl + _

Rapidly invoke an editor to write a long, complex, or tricky command

ctrl x e

ctrl a相同,但再按一次会从新回到原位置

ctrl x x

回车

ctrl octrl m

往右/左跳一个词

esc f/b

删除光标后的一个词

esc d

交换光标位置前的两个单词

esc t

当前位置至词尾,转成大/小写

esc u/L

ZSH

⌘ + f: 查找。支持正则。其中查找的内容会被自动复制。省去了再去⌘+c的步骤。同样,鼠标去选中的内容也会自动复制,也可以鼠标中键直接粘贴。一般在使用时,键入搜索关键词,然后用shift-tab或者tab左右自动补全,option + enter则自动将搜索结果键入,并且复制到剪贴板。

Shell 使用 Vi 模式

bindkey -v

你也可以像 vim 一样映射你的 escape 键:

bindkey -M viins ‘jj’ vi-cmd-mode

vipe:将文本编辑器加到管道中

brew install moreutils
echo "fdsdf"  | vipe | dosomthing

如果有一个替换了ls命令的别名 ls。调用原本的ls命令

\ls