分类目录归档:Tools

Nginx内置变量以及日志格式变量参数详解

Nginx内置变量以及日志格式变量参数详解

$args                    #请求中的参数值
$query_string            #同 $args
$arg_NAME                #GET请求中NAME的值
$is_args                 #如果请求中有参数,值为"?",否则为空字符串
$uri                     #请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令进行修改,$uri不包含主机名,如"/foo/bar.html"。
$document_uri            #同 $uri
$document_root           #当前请求的文档根目录或别名
$host                    #优先级:HTTP请求行的主机名>"HOST"请求头字段>符合请求的服务器名.请求中的主机头字段,如果请求中的主机头不可用,则为服务器处理请求的服务器名称
$hostname                #主机名
$https                   #如果开启了SSL安全模式,值为"on",否则为空字符串。
$binary_remote_addr      #客户端地址的二进制形式,固定长度为4个字节
$body_bytes_sent         #传输给客户端的字节数,响应头不计算在内;这个变量和Apache的mod_log_config模块中的"%B"参数保持兼容
$bytes_sent              #传输给客户端的字节数
$connection              #TCP连接的序列号
$connection_requests     #TCP连接当前的请求数量
$content_length          #"Content-Length" 请求头字段
$content_type            #"Content-Type" 请求头字段
$cookie_name             #cookie名称
$limit_rate              #用于设置响应的速度限制
$msec                    #当前的Unix时间戳
$nginx_version           #nginx版本
$pid                     #工作进程的PID
$pipe                    #如果请求来自管道通信,值为"p",否则为"."
$proxy_protocol_addr     #获取代理访问服务器的客户端地址,如果是直接访问,该值为空字符串
$realpath_root           #当前请求的文档根目录或别名的真实路径,会将所有符号连接转换为真实路径
$remote_addr             #客户端地址
$remote_port             #客户端端口
$remote_user             #用于HTTP基础认证服务的用户名
$request                 #代表客户端的请求地址
$request_body            #客户端的请求主体:此变量可在location中使用,将请求主体通过proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass传递给下一级的代理服务器
$request_body_file       #将客户端请求主体保存在临时文件中。文件处理结束后,此文件需删除。如果需要之一开启此功能,需要设置client_body_in_file_only。如果将次文件传 递给后端的代理服务器,需要禁用request body,即设置proxy_pass_request_body off,fastcgi_pass_request_body off,uwsgi_pass_request_body off,or scgi_pass_request_body off
$request_completion      #如果请求成功,值为"OK",如果请求未完成或者请求不是一个范围请求的最后一部分,则为空
$request_filename        #当前连接请求的文件路径,由root或alias指令与URI请求生成
$request_length          #请求的长度 (包括请求的地址,http请求头和请求主体)
$request_method          #HTTP请求方法,通常为"GET"或"POST"
$request_time            #处理客户端请求使用的时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$request_uri             #这个变量等于包含一些客户端请求参数的原始URI,它无法修改,请查看$uri更改或重写URI,不包含主机名,例如:"/cnphp/test.php?arg=freemouse"
$scheme                  #请求使用的Web协议,"http" 或 "https"
$server_addr             #服务器端地址,需要注意的是:为了避免访问linux系统内核,应将ip地址提前设置在配置文件中
$server_name             #服务器名
$server_port             #服务器端口
$server_protocol         #服务器的HTTP版本,通常为 "HTTP/1.0" 或 "HTTP/1.1"
$status                  #HTTP响应代码
$time_iso8601            #服务器时间的ISO 8610格式
$time_local              #服务器时间(LOG Format 格式)
$cookie_NAME             #客户端请求Header头中的cookie变量,前缀"$cookie_"加上cookie名称的变量,该变量的值即为cookie名称的值
$http_NAME               #匹配任意请求头字段;变量名中的后半部分NAME可以替换成任意请求头字段,如在配置文件中需要获取http请求头:"Accept-Language",$http_accept_language即可
$http_cookie
$http_host               #请求地址,即浏览器中你输入的地址(IP或域名)
$http_referer            #url跳转来源,用来记录从那个页面链接访问过来的
$http_user_agent         #用户终端浏览器等信息
$http_x_forwarded_for
$sent_http_NAME          #可以设置任意http响应头字段;变量名中的后半部分NAME可以替换成任意响应头字段,如需要设置响应头Content-length,$sent_http_content_length即可
$sent_http_cache_control
$sent_http_connection
$sent_http_content_type
$sent_http_keep_alive
$sent_http_last_modified
$sent_http_location
$sent_http_transfer_encoding

log_format有一个默认的、无须设置的combined日志格式设置,相当于Apache的combined日志格式,其具体参数如下:

log_format combined  ‘$remote_addr-$remote_user [$time_local]’

‘ “$request” $status $body_bytes_sent’

‘ “$http_referer” “$http_user_agent” ‘;

 

我现在使用的日志格式:

log_format access  ‘$http_x_forwarded_for $remote_addr [$time_local] “http://$host” “$request” ‘
‘$status $body_bytes_sent “$http_referer” “$http_user_agent” “$remote_user” ‘;

当日志文件中记录的值为”“时,表示为空

access为自定义的日志格式的名称,使用时引用即可:

access_log  /data/logs/nginx/ihouse_access.log access;

——————————————————————————————————

正确设置nginx中remote_addr和x_forwarded_for参数

什么是remote_addr:

remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP

什么是x_forwarded_for:

正如上面所述,当你使用了代理时,web服务器就不知道你的真实IP了,为了避免这个情况,代理服务器通常会增加一个叫做x_forwarded_for的头信息,把连接它的客户端IP(即你的上网机器IP)加到这个头信息里,这样就能保证网站的web服务器能获取到真实IP

使用HAProxy做反向代理时

通常网站为了支撑更大的访问量,会增加很多web服务器,并在这些服务器前面增加一个反向代理(如HAProxy),它可以把负载均匀的分布到这些机器上。你的浏览器访问的首先是这台反向代理,它再把你的请求转发到后面的web服务器,这就使得web服务器会把remote_addr设为这台反向代理的IP,为了能让你的程序获取到真实的客户端IP,你需要给HAProxy增加以下配置

   option forwardfor

它的作用就像上面说的,增加一个x_forwarded_for的头信息,把客户端的ip添加进去,否则的话经测试为空值

如上面的日志格式所示:$http_x_forwarded_for 是客户端真实的IP地址,$remote_addr是前端Haproxy的IP地址

或者:

当Nginx处在HAProxy后面时,就会把remote_addr设为HAProxy的IP,这个值其实是毫无意义的,你可以通过nginx的realip模块,让它使用x_forwarded_for里的值。使用这个模块需要重新编译Nginx,增加--with-http_realip_module参数

./configure  –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module \                                                              –with-http_realip_module –http-log-path=/data/logs/nginx/access.log –error-log-path=/data/logs/nginx/error.log

     set_real_ip_from 10.1.10.0/24;

     real_ip_header X-Forwarded-For;

上面的两行配置就是把从10.1.10这一网段过来的请求全部使用X-Forwarded-For里的头信息作为remote_addr,这样此时remote_addr就是客户端真实的IP地址

————————————————————–

X-Forwarded-For 和 X-Real-IP 获取客户端的ip的区别:

一般来说,X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中 来自4.4.4.4的一个请求,header包含这样一行 X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3 代表 请求由1.1.1.1发出,经过三层代理,第一层是2.2.2.2,第二层是3.3.3.3,而本次请求的来源IP 4.4.4.4是第三层代理 而X-Real-IP,一般记录真实发出请求的客户端IP,上面的例子,如果配置了X-Read-IP,将会是 X-Real-IP: 1.1.1.1 所以 ,如果只有一层代理,这两个头的值就是一样的

 

 

 

所有相关变量具体请详看官网:

http://nginx.org/en/docs/varindex.html

http://blog.csdn.net/njxdy/article/details/9998481

浅析PAC,教你动手修改你的PAC文件及user-rule文件实现自动代理

Shadowsocks作为现在一种很流行的穿墙工具,以其轻量级、速度感人等优点深受广大网友热捧。与VP_N相比,他就像一把锋利的”瑞士军刀”,不用受制于“系统全局代理”模式的困扰,控制更加便捷,基于Socks5安全加密协议,防止GF*W通过分析流量特征从而干扰的问题。而又不像GoAgent这种集中式爬墙模式,一般不会出现全局封锁等现象。不管你是因为什么原因喜欢上Shadowsocks,我相信她一定有给你带来好的体验的方面。

在Shadowsocks里面,系统代理模式有两种,一种是“系统代理模式”,另一种是“PAC代理模式”,通常情况下我们会选择后者,今天这里给大家解析一下PAC模式的原理以及如何修改PAC文件、user-rule文件实现自动代理,希望大家可以通过本文更的“科学上网”。

什么是PAC

代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来访问一个网址。

一个PAC文件包含一个JavaScript形式的函数“FindProxyForURL(url, host)”。这个函数返回一个包含一个或多个访问规则的字符串。用户代理根据这些规则适用一个特定的代理其或者直接访问。当一个代理服务器无法响应的时候,多个访问规则提供了其他的后备访问方法。浏览器在访问其他页面以前,首先访问这个PAC文件。PAC文件中的URL可能是手工配置的,也可能是是通过网页的网络代理自发现协议(Web Proxy Autodiscovery Protocol)自动配置的。

上面是从维基百科摘录的关于PAC的解释,我做了一个简单的图片解释什么是PAC:

简单的讲,PAC就是一种配置,它能让你的浏览器智能判断哪些网站走代理,哪些不需要走代理。用过Shadowsocks的朋友应该会知道, shadowsocks.exe 同级目录下有一个 pac.txt 文件,这正是我们本文刚刚所说的pac配置文件。

打开 pac.txt 文件,可以看到如下内容

可以看到pac配置文件是用的JavaScript语法,里面有一个变量 rules ,是一个JSon数组格式的数据类型,数组里面存放的是各种URL的通配符,那么在pac模式下,如果当访问符合这个数组里面任意一个URL通配符的网址时,系统会走代理,反之直连。比如图中pac配置,如果访问 http://www.cloudflare.com/index.php 时,会走代理,而访问百度、新浪等国内网站则会选择直连方式。

PAC的优势

PAC自动代理属于智能判断模式,相比全局代理,它的优点有:

  1. 不影响国内网站的访问速度,防止无意义的绕路
  2. 节省Shadowsocks服务的流量,节省服务器资源
  3. 控制方便

PAC文件及user-rule文件的语法规则

那么,当一个网站被墙,如何添加到PAC里面让其能够正常访问呢?在Shadowsocks里面,可以有如下两个方式:

1. 添加到 pac.txt 文件中

编辑 pac.txt 文件,模仿里面的一些URL通配符,再添加一个,例如"||ip138.com", ,注意不要忘记了 , 半角逗号,那么意思就是所有 ip138.com域名下的网址都将走Shadowsocks代理,打开ip138可以看到IP已经变成Shadowsocks所用的国外代理了

2. 添加到 user-rule.txt 文件中

编辑 user-rule.txt 文件,这里和 pac.txt 文件语法不完全相同,user-rule文件中,每一行表示一个URL通配符,但是通配符语法类似。例如添加一行||ip138.com^ ,然后记得右键小飞机-PAC-从GFWList更新本地PAC,打开ip138可以看到IP已经变成Shadowsocks所用的国外代理了

注意末尾不要忘记 ^ 符号,意思是要么在这个符号的地方结束,要么后面跟着?,/等符号。

自定义代理规则的设置语法与GFWlist相同,语法规则如下:

  1. 通配符支持。比如 *.example.com/* 实际书写时可省略 * , 如.example.com/ , 和 *.example.com/* 效果一样
  2. 正则表达式支持。以 \ 开始和结束, 如 \[\w]+:\/\/example.com\
  3. 例外规则 @@ ,如 @@*.example.com/* 满足 @@ 后规则的地址不使用代理
  4. 匹配地址开始和结尾 | ,如 |http://example.com 、 example.com| 分别表示以 http://example.com 开始和以 example.com 结束的地址
  5. || 标记,如 ||example.com 则 http://example.com 、https://example.com 、 ftp://example.com 等地址均满足条件
  6. 注释 ! 。 如 !我是注释

更多user-rule.txt语法规则,可以参考AdBlockPlus过滤规则https://adblockplus.org/en/filter-cheatsheet

SublimeText自带格式化代码功能 – reindent

这个功能被SublimeText命名为reindent,如果你使用了SublimeText汉化包的话叫做“再次缩进”,但是这种叫法说不通。

该选项的路径:Edit – Line – Reindent(中文路径则是:编辑 – 行 – 再次缩进)

同时说明一下,该功能并不需要选中代码之后才能执行格式化功能,其默认是格式化整个文件里的代码。

接下来就说到主题了,应该如何对该格式化代码功能进行快捷键组合的设置呢?

1、首先通过以下路径打开用户按键绑定文件:

Preferences → Key Bindings – User

2、然后在其中添加以下代码(如果你有需要的话,其中的快捷键组合是可以自己定义的):

{“keys”: [“ctrl+shift+r”], “command”: “reindent” , “args”:
{“single_line”: false}}

在这儿请注意每组快捷键组合包含着一个中括号里面,通过大括号定义一组快捷键,然后通过英文逗号进行分隔,具体可参考下图:

本文到这儿就结束了吗?不,下面说下如果SublimeText自带的格式化代码不适合用在你所使用的语言(比如SQL、Ruby等)的话,你可以通过插件的方式进行配置,具体请看下述操作:

1、以下内容基于已经你已经在你的SublimeText中安装了package control(教程在本站有);

2、通过快捷键组合ctrl+shift+P唤出命令面板

3、在面板中输入“install package”后回车

4、接着输入“format”(即格式化的意思),在弹出的列表中找到对应你所想要进行格式化操作的语言,具体看图:

Sublime Text 3最好的功能、插件和设置

Sublime Text 3 是一个了不起的软件。首先,它是一个干净,实用,可以快速的编写代码编辑器。它不仅具有令人难以置信的内置功能(多行编辑和VIM模式),而且还支持插件,代码片段和其他许多东西。

我知道,网上已经有许多关于 Sublime Text 3 的文章,这事好事情。在这篇文章中,我们将看到 Sublime Text 3 的最好的部分,您可能已经听说过其中的一些,但也许其他一些人还不知道。

Features(功能)

Command Palette (命令面板) ctrl + shift + p

命令面板可以使你访问设置菜单中可以所有的东西,调用包命令,更改文件的语法,处理Sublime项目,等等。举例来说,你可以在命令面板中Git命令添加,分支,提交和推送。

使用: ctrl + shift + p

File Switching (文件切换) ctrl + p

Sublime Text提供了一个非常快速的方式来打开新的文件。只要按下Ctrl+ P并开始输入你想要打开的文件的名称。一旦找到文件,只需按enter键,就可以开始直接输入到该文件了!

使用ctrl + p

Goto Symbols (跳转标记) ctrl + r

当你编辑一个大文件时,文件中有一堆方法,按 Ctrl + R 将其全部列出来,使他们更容易找到。开始尝试的输入你想要的,然后按 Enter 就可以快速跳转这个方法了。

使用方法 :按 Ctrl + R
Sublime Text 3 有一个新功能(Goto Definition 转到定义)。它提供了 Sublime Text 更多功能,使其更接近于一个IDE。如果你有兴趣,可以自己去学习一下。

Multi-Edit(多行编辑) ctrl + click

在我看来这绝对是Sublime Text最好的功能。使用它之后,就很难再回到其他文本编辑器。(愚人码头注:其实很多编辑器,IDE现在都有这功能了,比如:WebStorm)有许多不同的方式使用多行编辑:

  • ctrl + d : 选中光标所占的文本,继续操作则会选中下一个相同的文本。(愚人码头注:多按几下试试)
  • ctrl + click : 单击想要编辑的每一个地方,都将创建一个光标
  • ctrl + shift + falt + enter : 在你的文件查找一个文本,然后将其全部选中

以下叔整理的:

  • ctrl + l 选中整行,继续操作则继续选择下一行,效果和 shift + 效果一样。
  • ctrl + shift + l 先选中多行,再按下快捷键,会在每行行尾插入光标,即可同时编辑这些行。
  • ctrl + alt + ctrl + alt +鼠标向上拖动 向上添加多行光标,可同时编辑多行。
  • ctrl + alt + ctrl + alt +鼠标向下拖动 向下添加多行光标,可同时编辑多行。
  • shift + 向上选中多行。
  • shift + 向下选中多行。

Snippets(代码片段)

代码片段是Sublime Text的另一大特点。您可以使用预装的,也可以自己创建,或安装具有代码片段的包。你所要做的就是输入一个定义了代码片段的文本,它会扩展到你的代码段。

例如,键入lorem将产生lorem存有文本。

使用: 输入一个定义了代码片段的文本(例如 lorem ),然后按 tab 键。

这里有一篇关于创建代码片段的非常棒的文章,http://www.hongkiat.com/blog/sublime-code-snippets/

Keyboard Shortcuts (快捷键)

Sublime Text的快捷键的数量是惊人的。我觉得这是Sublime Text另一个好的功能。如果太多了,你可以将自己常用的快捷键从主键( home keys )移到了自己的快捷键列表中(my keyboard)。

对于Sublime Text键盘快捷键的完整列表,看看我们的键盘快捷键文章。https://scotch.io/bar-talk/sublime-text-keyboard-shortcuts

Projects(项目)

在Sublime Text中,项目是工作流程中不可或缺的一部分。一个项目仅仅是一个 Sublime工作空间,项目中的文件夹都是开放的,并显示在侧边栏中。这是很有帮助的,因为你可以定义一个项目,并添加文件夹到项目中,并能够迅速地在文件夹之间切换。

使用项目,你只需要去Windows资源管理器或Finder中找到你想要的项目,并将其拖到Sublime Text,就可以了。

保存一个项目:进入命令面板,输入保存项目。

切换项目: ctrl + alt + p

Packages/Plugins(包/插件)

Package Control(包控制)

Sublime Text提供了绝对必要的包管理器。这是安装下面列出的所有插件和主题的最佳方式。继续,在包控制在安装插件。

使用方法:进入命令面板( ctrl + shift + p ),然后键入 install

包控制将加载所有可用于安装的包。看看你可以查找并安装自己喜欢的包..

Alignment (代码对齐)

一个非常简单和易于使用的插件,使你的代码组织和美观。当您重温代码时候非常有用。

使用方法:选中要调整的行,然后按 Ctrl + Alt + A

BracketHighlighter

该插件提供行数列高亮的各种配对的语法符号。(愚人码头注:就是将配对的括号等显示在行数列上)

Colorpicker

使用一个取色器改变颜色

使用方法 : ctrl + shift + c

注:该插件在Mac上使用时非常漂亮

Emmet

Emmet绝对的节省时间。您可以轻松快速地编写HTML。

使用方法: ctrl + alt + enter ,并且开始输入Emmet风格的HTML

看看我们的 Emmet指南 ,以了解更多,并自己尝试Emmet。

DocBlockr

一个真正简单的方式来轻松地创建许多语言包括JavaScript,PHP和CoffeeScript的文档块。只要在函数的上面输入 /** ,按 Tab 就可以了。DocBlockr会观察函数需要的变量名和类型,并创建文档块。

Git

Git帮助你与你的Git repo协议进行交互。它支持很多命令像 init , push , pull ,branch , stash ,等的。了解更多关于你在Sublime Text里面究竟能使用哪些Git功能,以提高您的工作流程。 https://scotch.io/tutorials/using-git-inside-of-sublime-text-to-improve-workflow

GitGutter

这是一个小巧有用的插件,它会告诉你自上次git commit以来已经改变的行。一个指示器显示在行号的旁边。

Gist

这个插件可以让你拉你的Gists,并把它们插入到你的文件。当你有一个Gists,以启动一个HTML文件或任何其他可重用的代码时候,这是有用的。

使用方法:打开命令面板,并且键入 gist 。您也可以使用所显示的快捷方式。

SidebarEnhancements

在侧边栏的文件上右击时,这个插件提供了大量更多的选择。打开,查找,复制和粘贴,等等。

这里是老菜单和SidebarEnhanced菜单的比较。

Themes (主题)

Sublime Text可以安装主题,有一些主题真的很酷。您可以使用包控制找到这些。使用包控制安装一个主题,然后更新您的用户设置使用它。

// User/Preferences.sublime-settings
{
    "theme": "Soda Light.sublime-theme"
}

注意: 您可能必须重新启动Sublime Text,这些更改才会生效。

一些流行的主题:

THEME – SODA包括 LIGHT 和 DARK

THEME – FLATLAND

PREDAWN

Flatland的一个分支。 repo

SPACEGRAY

“一个Hyperminimal UI主题”。这里有 更多的相关资料

更多皮肤:

更多优秀主体, 请查看 2014年的最佳Sublime Text的主题

Color Schemes (配色方案)

除了改变你的主题,你也可以改变你的配色方案。这不同于主题,因为主题是Sublime Text的包。配色方案仅仅是配色方案文件,并更改您的设置。

更改配色方案:菜单, Preferences 首选项> Color Scheme 配色方案,并选择一个。

你会马上看到变化,可以检查你是不是喜欢。对于一些大的颜色方案的列表,请访问Dayle Rees的 colour schemes(配色方案) repo或 color sublime ,一项伟大的工程。

Settings(设置)

Sublime自带了大量的设置。我建议你去看看它所提供的所有设置。

为了让您进入用户设置,使用命令面板并且键入 user

这里是我当前的设置,大部分是属性不需要解释了吧。为自己挑选好的部分并作为自己的自定义设置!

// User/Preferences.sublime-settings
{
    "bold_folder_labels": true,
    "color_scheme": "Packages/Theme - Flatland/Flatland Monokai.tmTheme",
    "font_face": "Ubuntu Mono",
    "font_options": "subpixel_antialias",
    "font_size": 14,
    "highlight_line": true,
    "highlight_modified_tabs": true,
    "ignored_packages":
    [
    ],
    "line_padding_bottom": 1,
    "line_padding_top": 1,
    "rulers":
    [
        80
    ],
    "scroll_past_end": true,
    "tab_size": 4,
    "tab_completion": false,
    "theme": "Soda Light.sublime-theme",
    "translate_tabs_to_spaces": true,
    "trim_trailing_white_space_on_save": true,
    "vintage_start_in_command_mode": true,
    "word_wrap": true
}

我在Sublime中用的是最佳模式。它提供了 vi 编辑命令代替Sublime Text。它不是原vi包的全功能,但它是我目前见过最接近 vi编辑器的文本编辑器。使用你的键盘快捷键和命令包就可以非常快速的开发。

上面的设置会在你打开一个文件时自动开启Vintage模式(叔注:Vintage是Sublime Text的vi模式编辑包。 可以使用组合vi命令来调用Sublime Text的功能,包括多重选择。)。

如果你不喜欢这个功能,只是删除 vintage_start_in_command_mode 就可以了,如果你想完全禁用Vintage模式,那么删除 ignored_packages 设置。

ublime text 3 快捷键大全以及配置编译环境

Ctrl+Shift+P:打开命令面板
Ctrl+P:搜索项目中的文件
Ctrl+G:跳转到第几行
Ctrl+W:关闭当前打开文件
Ctrl+Shift+W:关闭所有打开文件
Ctrl+Shift+V:粘贴并格式化
Ctrl+D:选择单词,重复可增加选择下一个相同的单词
Ctrl+L:选择行,重复可依次增加选择下一行
Ctrl+Shift+L:选择多行
Ctrl+Shift+Enter:在当前行前插入新行
Ctrl+X:删除当前行
Ctrl+M:跳转到对应括号
Ctrl+U:软撤销,撤销光标位置
Ctrl+J:选择标签内容
Ctrl+F:查找内容
Ctrl+Shift+F:查找并替换
Ctrl+H:替换
Ctrl+R:前往 method
Ctrl+N:新建窗口
Ctrl+K+B:开关侧栏
Ctrl+Shift+M:选中当前括号内容,重复可选着括号本身
Ctrl+F2:设置/删除标记
Ctrl+/:注释当前行
Ctrl+Shift+/:当前位置插入注释
Ctrl+Alt+/:块注释,并Focus到首行,写注释说明用的
Ctrl+Shift+A:选择当前标签前后,修改标签用的
F11:全屏
Shift+F11:全屏免打扰模式,只编辑当前文件
Alt+F3:选择所有相同的词
Alt+.:闭合标签
Alt+Shift+数字:分屏显示
Alt+数字:切换打开第N个文件
Shift+右键拖动:光标多不,用来更改或插入列内容
鼠标的前进后退键可切换Tab文件
按Ctrl,依次点击或选取,可需要编辑的多个位置
按Ctrl+Shift+上下键,可替换行

选择类

Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本。

Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑。举个栗子:快速选中并更改所有相同的变量名、函数名等。

Ctrl+L 选中整行,继续操作则继续选择下一行,效果和 Shift+↓ 效果一样。

Ctrl+Shift+L 先选中多行,再按下快捷键,会在每行行尾插入光标,即可同时编辑这些行。

Ctrl+Shift+M 选择括号内的内容(继续选择父括号)。举个栗子:快速选中删除函数中的代码,重写函数体代码或重写括号内里的内容。

Ctrl+M 光标移动至括号内结束或开始的位置。

Ctrl+Enter 在下一行插入新行。举个栗子:即使光标不在行尾,也能快速向下插入一行。

Ctrl+Shift+Enter 在上一行插入新行。举个栗子:即使光标不在行首,也能快速向上插入一行。

Ctrl+Shift+[ 选中代码,按下快捷键,折叠代码。

Ctrl+Shift+] 选中代码,按下快捷键,展开代码。

Ctrl+K+0 展开所有折叠代码。

Ctrl+← 向左单位性地移动光标,快速移动光标。

Ctrl+→ 向右单位性地移动光标,快速移动光标。

shift+↑ 向上选中多行。

shift+↓ 向下选中多行。

Shift+← 向左选中文本。

Shift+→ 向右选中文本。

Ctrl+Shift+← 向左单位性地选中文本。

Ctrl+Shift+→ 向右单位性地选中文本。

Ctrl+Shift+↑ 将光标所在行和上一行代码互换(将光标所在行插入到上一行之前)。

Ctrl+Shift+↓ 将光标所在行和下一行代码互换(将光标所在行插入到下一行之后)。

Ctrl+Alt+↑ 向上添加多行光标,可同时编辑多行。

Ctrl+Alt+↓ 向下添加多行光标,可同时编辑多行。

编辑类

Ctrl+J 合并选中的多行代码为一行。举个栗子:将多行格式的CSS属性合并为一行。

Ctrl+Shift+D 复制光标所在整行,插入到下一行。

Tab 向右缩进。

Shift+Tab 向左缩进。

Ctrl+K+K 从光标处开始删除代码至行尾。

Ctrl+Shift+K 删除整行。

Ctrl+/ 注释单行。

Ctrl+Shift+/ 注释多行。

Ctrl+K+U 转换大写。

Ctrl+K+L 转换小写。

Ctrl+Z 撤销。

Ctrl+Y 恢复撤销。

Ctrl+U 软撤销,感觉和 Gtrl+Z 一样。

Ctrl+F2 设置书签

Ctrl+T 左右字母互换。

F6 单词检测拼写

搜索类

Ctrl+F 打开底部搜索框,查找关键字。

Ctrl+shift+F 在文件夹内查找,与普通编辑器不同的地方是sublime允许添加多个文件夹进行查找,略高端,未研究。

Ctrl+P 打开搜索框。举个栗子:1、输入当前项目中的文件名,快速搜索文件,2、输入@和关键字,查找文件中函数名,3、输入:和数字,跳转到文件中该行代码,4、输入#和关键字,查找变量名。

Ctrl+G 打开搜索框,自动带:,输入数字跳转到该行代码。举个栗子:在页面代码比较长的文件中快速定位。

Ctrl+R 打开搜索框,自动带@,输入关键字,查找文件中的函数名。举个栗子:在函数较多的页面快速查找某个函数。

Ctrl+: 打开搜索框,自动带#,输入关键字,查找文件中的变量名、属性名等。

Ctrl+Shift+P 打开命令框。场景栗子:打开命名框,输入关键字,调用sublime text或插件的功能,例如使用package安装插件。

Esc 退出光标多行选择,退出搜索框,命令框等。

显示类

Ctrl+Tab 按文件浏览过的顺序,切换当前窗口的标签页。

Ctrl+PageDown 向左切换当前窗口的标签页。

Ctrl+PageUp 向右切换当前窗口的标签页。

Alt+Shift+1 窗口分屏,恢复默认1屏(非小键盘的数字)

Alt+Shift+2 左右分屏-2列

Alt+Shift+3 左右分屏-3列

Alt+Shift+4 左右分屏-4列

Alt+Shift+5 等分4屏

Alt+Shift+8 垂直分屏-2屏

Alt+Shift+9 垂直分屏-3屏

Ctrl+K+B 开启/关闭侧边栏。

F11 全屏模式

Shift+F11 免打扰模式

配置编译环境

控制台输入(以C++为例)

原理很简单,就是在外部建立一个用来执行文件的 bat,然后调用它。注意的就是,需要用start 来打开一个新窗口,同时需要 pause 一下来看结果,其中很蛋疼的就是Sublime默认后台执行你的start,如果你的pause和start放在一个文件了pause对start %1 的文件是无效的,因此其实需要建立两个文件。注意环境变量。。。(关于什么是环境变量,三两句解释不清楚,最好自己百度一下。)

配好之后个人感觉控制台输入意义不是很大,做题的话都是从文件读入,做开发基本不需要读入。So~ 各位慎重。

MyCRun.bat

@echo off

%1

echo.

echo ——————-

pause

exit
MyCallRun.bat

@start  MyCRun %1

配置文件在 Sublime Text 3\Packages\C++.sublime-package 。 先备份一下。

修改里面的 C++.sublime-build 为

{

“shell_cmd”: “g++ \”${file}\” -o \”${file_path}/${file_base_name}\””,

“file_regex”: “^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$”,

“working_dir”: “${file_path}”,

“selector”: “source.c, source.c++”,

“variants”:

[

{

“name”: “Run”,

“shell_cmd”: “g++ \”${file}\” -o \”${file_path}/${file_base_name}\” && MyCallRun \”${file_path}/${file_base_name}.exe\””    //  其实就是这里加了个MyCallRun

}

]

}

C/C++

Sublime Text 3 默认配置好了 c++ 。但是需要你自己把 gcc 目录添加进环境变量

Java

Sublime Text 3 默认只运行了 javac,需要自己添加运行。

苦逼看不懂 Sublime 的命令格式,于是把 javac 改成一个自己的bat。(感觉也可以像C++那样用 && 连起来)

在命令行可直接访问的地方建立 myJRun.bat (我直接放在 jdk/bin 下了)

@ECHO OFF

cd %~dp1

ECHO Compiling %~nx1…

IF EXIST %~n1.class (

DEL %~n1.class

)

javac %~nx1

IF EXIST %~n1.class (

ECHO Running…

ECHO ———————-OUTPUT———————-

java %~n1

)

注意不能使用 cls 。

修改java的编译选项(备份好原来的)。

目录:Packages/Java.sublime-package/JavaC.sublime-build

{

“shell_cmd”: “myJRun.bat \”$file\””,

“file_regex”: “^(…*?):([0-9]*):?([0-9]*)”,

“selector”: “source.java”

}

这样以后写的Java代码点 Build 就会自动运行了。

这种办法不能跨平台,再研究研究Sublime自己的方式。

Go

用 Sublime 开发 golang 的环境很简单,只需要安装一个 GoSublime 就差不多了。

linux下svn命令大全

1、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co
2、往版本库中添加新的文件
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加当前目录下所有的php文件)
3、将改动的文件提交到版本库
svn commit -m “LogMessage“ [-N] [–no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)
例如:svn commit -m “add test file for my test“ test.php
简写:svn ci
4、加锁/解锁
svn lock -m “LockMessage“ [–force] PATH
例如:svn lock -m “lock test file“ test.php
svn unlock PATH
5、更新到某个版本
svn update -r m path
例如:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up
6、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st
7、删除文件
svn delete path -m “delete test fle“
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种
简写:svn (del, remove, rm)
8、查看日志
svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
9、查看文件详细信息
svn info path
例如:svn info test.php
10、比较差异
svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
11、将两个版本之间的差异合并到当前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
12、SVN 帮助
svn help
svn help ci
——————————————————————————
以上是常用命令,下面写几个不经常用的
——————————————————————————
13、版本库下的文件和目录列表
svn list path
显示path目录下的所有属于版本库的文件和目录
简写:svn ls
14、创建纳入版本控制下的新目录
svn mkdir: 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH…
2、mkdir URL…
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
15、恢复本地修改
svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录
16、代码库URL变更
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch –relocate FROM TO [PATH…]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将
服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的
方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。
17、解决冲突
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。
18、输出指定文件或URL的内容。
svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

PhpStorm 快捷键大全 PhpStorm 常用快捷键和配置

PhPStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,PhpStorm可随时帮助用户对其编码进行调整,运行单元测试或者提供可视化debug功能。Phpstrom的一款名为Magicento的插件对快速创建Magento插件十分有用。

常用快捷键 

设置快捷键:File -> Settings -> IDE Settings -> Keymap -> 选择“eclipse” -> 然后“Copy”一份 -> 再个性化设置(自己习惯的)快捷键

常用快捷键(keymaps:Default情况下)

Esc键编辑器(从工具窗口)
F1   帮助 千万别按,很卡!
F2(Shift+F2)  下/上高亮错误或警告快速定位
F3   向下查找关键字出现位置
F4   查找变量来源
F5   复制文件/文件夹
F6   移动
F11  切换书签
F12  返回到以前的工具窗口

注意:部分快捷键,必须在没有更改快捷键的情况下才可以使用

查询快捷键
CTRL+N   查找类
CTRL+SHIFT+N  查找文件,打开工程中的文件(类似于eclipse中的ctrl+shift+R),目的是打开当前工程下任意目录的文件
CTRL+SHIFT+ALT+N 查 找类中的方法或变量(JS)
CIRL+B   找变量的来源,跳到变量申明处
CTRL+ALT+B  找所有的子类
CTRL+SHIFT+B  找变量的 类
CTRL+G   定位行,跳转行
CTRL+F   在当前窗口查找文本
CTRL+SHIFT+F  在指定路径查找文本
CTRL+R   当前窗口替换文本
CTRL+SHIFT+R  在指定路径替换文本
ALT+SHIFT+C  查找修改的文件,最近变更历史
CTRL+E   最近打开的文件
F3   查找下一个
SHIFT+F3  查找上一个
F4   查找变量来源
CTRL+ALT+F7  选 中的字符 查找工程出现的地方
ALT+F7 直接查询选中的字符
Ctrl+F7  文件中查询选中字符

自动代码
ALT+回车  导入包,自动修正
CTRL+ALT+L  格式化代码
CTRL+ALT+I  自动缩进
CTRL+ALT+O  优化导入的类和包
CTRL+E  最近更改的文件/代码
CTRL+SHIFT+SPACE 切换窗口
CTRL+SPACE空格  代码自动完成,代码提示,一般与输入法冲突
CTRL+ALT+SPACE  类 名或接口名提示(与系统冲突)
CTRL+P   方法参数提示,显示默认参数
CTRL+J   自动代码提示,自动补全
CTRL+ALT+T  把选中的代码放在 TRY{} IF{} ELSE{} 里
ALT+INSERT  生成代码(如GET,SET方法,构造函数等)

复制快捷方式
F5   复制文件/文件夹
CTRL+C   复制
CTRL+V   粘贴
CTRL+X   剪 切,删除行
CTRL+D   复制行
Ctrl + Y    删除行插入符号
CTRL+SHIFT+V  可以复制多个文本

高亮
CTRL+F   选中的文字,高亮显示 上下跳到下一个或者上一个
F2(Shift+F2) 高亮错误或警告快速定位
SHIFT+F2  高亮错误或警告快速定位
CTRL+SHIFT+F7  高亮显示多个关键字.
本地历史VCS/SVN
Alt +反引号(’) 快速弹出VCS菜单
Ctrl + K         提交项目VCS
Ctrl + T         更新项目从VCS
Alt + Shift + C  查看最近发生的变化

其他快捷方式
CTRL+Z        倒退(代码后悔)
CTRL+SHIFT+Z  向前
CTRL+H        显 示类结构图
Ctrl +F12      文件结构弹出
Ctrl+Shift+H  方法的层次结构
Ctrl+Alt+H    呼叫层次
CTRL+Q   显示代码注释
CTRL+W   选中代码,连续按会 有其他效果
Ctrl+Shift+W   减少当前选择到以前的状态
CTRL+B   转到声明,快速打开光标处的类或方法说明注释(CTRL + 鼠标单击 也可以)
CTRL+O   魔术方法
CTRL+/   注释//取消注释
CTRL+SHIFT+/  注释/*…*/
CTRL+ []   光标移动到 {}[]开头或结尾位置
CTRL+SHIFT+[]    选中块代码,可以快速复制
ctrl + ‘-/+’: 可以折叠项目中的任何代码块,包括htm中的任意nodetype=3的元素,function,或对象直接量等等。它不是选中折叠,而是自动识别折叠。

ctrl + ‘.’: 折叠选中的代码的代码

Ctrl+Shift+U   选中的字符大小写转换
ctrl+shift+i      快速查看变量或方法定义源
CTRL+ALT+F12  资源管理器打开文件夹,跳转至当前文件在磁盘上的位置
ALT+F1   选择当前文件或菜单中的任何视图工具栏
SHIFT+ALT+INSERT 竖编辑模式

CTRL+ALT ←/→  返回上次编辑的位置
ALT+ ←/→  切换代码视图,标签切换
ALT+ ↑/↓  在方法间快速移动定位
alt + ‘7’: 显示当前的类/函数结构。类似于eclipse中的outline的效果。试验了一下,要比aptana的给力一些,但还是不能完全显示prototype下面的方法名。
SHIFT+F6  重命名,重构 当前区域内变量重命名/重构
不但可以重命名文件名,而且可以命名函数名,函数名可以搜索引用的文件,还可以重命名局部变量。还可以重命名标签名。在sublime text中有个类似的快捷键:ctrl+shift+d。

ctrl+shift+enter(智能完善代码 如 if())
ctrl+shift+up/down(移动行、合并选中行,代码选中区域 向上/下移动)
CTRL+UP/DOWN  光标跳转到编辑器显示区第一行或最后一行下
ESC   光标返回编辑框
SHIFT+ESC  光 标返回编辑框,关闭无用的窗口
CTRL+F4   关闭当前的编辑器或选项卡

Ctrl + Alt + V引入变量
Ctrl + Alt + F 类似引入变量
Ctrl + Alt + C引入常量

Ctrl + Tab   键切换选项卡和工具窗口
Ctrl + Shift + A  查找快捷键
Alt + #[0-9]      打开相应的工具窗口
Ctrl + Shift + F12 切换最大化编辑器
Alt + Shift + F    添加到收藏夹
Alt + Shift + I    检查当前文件与当前的配置文件
Ctrl +反引号(`)  快速切换目前的配色/代码方案/快捷键方案/界面方案
Ctrl + Alt + S     打开设置对话框(与QQ冲突)

运行
Alt + Shift + F10  选择的配置和运行
Alt + Shift + F9   选择配置和调试
Shift + F10        运行
Shift + F9调试
Ctrl + Shift + F10运行范围内配置编辑器
Ctrl + Shift + X运行命令行

调试
F8步过
F7步入
Shift + F7智能进入
Shift + F8步骤
ALT + F9运行到光标
Alt + F8计算表达式
F9恢复程序
Ctrl + F8切换断点
Ctrl + Shift + F8查看断点

导航
Shift + Esc键隐藏活动或最后一个激活的窗口
Ctrl + Shift + F4关闭活动运行/消息/ / …选项卡
Ctrl + Shift + Backspace键导航到最后编辑的位置
Ctrl + Alt+B   到实施(S)
Ctrl + Shift+I  打开快速定义查询
Ctrl + U        转到super-method/super-class
Alt + Home      组合显示导航栏

书签
Ctrl + F11切换书签助记符
Ctrl +#[0-9]转到编号书签
Shift + F11显示书签

编辑
Ctrl + Q      快速文档查询
ALT + INSERT  生成的代码…器(getter,setter方法,构造函数)
Ctrl + O      覆盖方法
Ctrl + I      实现方法

Alt + Enter   显示意图的行动和快速修复
Shift + Tab   键缩进/取消缩进选中的行

Ctrl + Shift + J  智能线连接(仅适用于HTML和JavaScript)
Ctrl + Enter      智能线分割(HTML和JavaScript)
Shift + Enter     开始新的生产线

Ctrl + Delete   删除字(word)
Ctrl + Backspace删除字开始
Ctrl +小键盘+ / – 展开/折叠代码块
Ctrl + Shift +小键盘+展开全部
Ctrl + Shift +数字键盘关闭全部

如下图

Phpstorm editor

1.界面中文方框问题

Settings->Appearance中
Theme 设置 Windows
勾选Override default fonts by (not recommended),设置字体为宋体

Interface box problem in Chinese

2.显示行号

Settings->Editor->Appearance标签项,勾选Show line numbers

3.光标不随意定位

Settings->Editor中去掉Allow placement of caret after end of line。

4.启动的时候不打开工程文件

Settings->General去掉Reopen last project on startup.

5.无法起动Tomcat( IntelliJ IDEA)

请使用ZIP版的Tomcat

6.快捷键问题

可以使用其他软件的快捷键,
Settings->Keymap

Other software keyboard shortcuts

7.快捷键冲突(自己修改)

默认代码提示和补全快捷键跟输入法冲突,如何解决:Settings->Keymap

在上面面的图中,点击COPY ,自己新建一个方案,如 T1

然后开始设置快捷键,修改时,右击会弹出菜单,如下图,改成你想要的快捷键

Phpstorm shortcuts

8.用*标识编辑过的文件

Editor –> Editor Tabs
选中Mark modifyied tabs with asterisk

9.编码设置:编辑器中中文乱码问题

这个是项目字符编码设置错误
FILE ->Settings->       有3处设置根据自己需要设置
IDE Encondings:IDE编码 ,选择 IDE Encoding为GBK。这边要自己去调整了
Project Encoding:项目编码
Default encoding for properties files:默认文件编码

10.编辑器中字体和大小

FILE -> Settings> Editor->Colors & Fonts -> Font -> 右侧
Size:字体大小
Line spacing:行间距
下框中是字体,左侧->可选择字体,右侧->实际应用字体

Phpstorm font and size

11.显示文件夹或文件过滤

File->Setting->File Types->Ignore file and folders
里面填写你要的过滤不显示的
注意大小写哦

12.当前编辑文件定位

方法1) 在编辑的所选文件按ALT+F1, 然后选择PROJECT VIEW

Phpstorm file location

方法2) 左侧 项目列表框 顶部的 定位图标

Phpstorm file location2

13.优化文件保存

File->Settings->General->
Synchronize file on frame activation:个人需要是否取消同步文件
Save files on framedeactivation:取消
Save files automatically:选中,设置自动保存,设置 30秒自动保存时间,这样IDEA依然可以自动保持文件,所以在每次切换时,你需要按下Ctrl+S保存文件

14.SVN设置

Setting->Version control-> 右侧 VCS 下面选择 Subversion

网络上比较流行的PHPStorm注册码:

用户名:EMBRACE

注册码:

===== LICENSE BEGIN =====

11674-12042010

0000064nA0kkqI8qwPBF1rebuLP2Js

Shb1n3EDL6mUr9LnhpxzMTxV”zZNjA

DVi1nwUvh7UuZ8FGwaN8WejHHHtFop

===== LICENSE END =====

用户名:EMBRACE

注册码:

===== LICENSE BEGIN =====

11674-12042010

0000064nA0kkqI8qwPBF1rebuLP2Js

Shb1n3EDL6mUr9LnhpxzMTxV”zZNjA

DVi1nwUvh7UuZ8FGwaN8WejHHHtFop

===== LICENSE END =====