Pycharm 常用快捷键大全【快查字典版】
1. 格式化代码 【Ctrl + Alt + L】
我们写代码的时候会发现有很多黄色的波浪号,类似下图中的,这个时候可以点击任意黄色波浪号的代码,然后按下【Ctrl + Alt + L】进行代码格式化
格式化效果
def x():
a = 1
b = [1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 123, 12, 31, 231, 23, 123, 1, 231, 23, 123, 1, 43, 53, 643, 53, 4, 24, 12, 31,
231, 23, 123, 24, 53, 4534, 2, 1231, 23, 1]
print(a)
x()
2. 多行代码合并为一行【Crtl+Shift+J】
如果想将下图的代码合并为一行,可以全选它们,然后按【Crtl+Shift+J】即可合并代码为一行,还会自动补充代码
x=1
y=1
z=1
合并后的效果
x=1; y=1; z=1
3. 修正报警告的代码【Ctrl + Enter】
当出现黄色波浪号时,可以在对应代码出按下【Ctrl + Enter】进行修正代码的操作
按下后,会有多种选择供你修正,包括:格式化代码,忽略该警告,自动修改代码等
例如选择:【invert ‘if’ condition】会自动改成下面的代码:
def test(x):
if 1 != 1:
return
pass
4 .包装代码【Crtl+Alt+T】
我们可以快速的为输入的代码添加if、while、捕获异常等条件
例如有如下代码
x=1
我们选中该代码后按下【Crtl+Alt+T】会弹窗让我们选择要包装的条件,现在我们选择【try/except】
包装效果
try:
x=1
except:
pass
5. 快速注释/取消注释【Crtl+/】
如果我们想注释一部分代码可以选中对应的代码,并按下【Crtl+/】
def show_text(text,a):
a+=1
print(text,a)
注释结果
# def show_text(text,a):
# a+=1
# print(text,a)
再次按下【Crtl+/】则会取消注释
6. 向右缩进一个制表位【Tab】
python对代码的缩进要求很严格,下面的代码运行是会报错的!
def test():
y = 1
y += 1
print(y)
但一行一行的去调整缩进非常难受,效率很低!这时候可以选中需要缩进的代码,按下【Tab】即可效果
def test():
y = 1
y += 1
print(y)
7. 向左缩进一个制表位【Shift + Tab】
同上
8. 在上方插入新行【Ctrl + Alt + Enter】
如果想在下面代码a+=1
的上方插入空行的话,可以点击到a+=1
这行,然后按下【Ctrl + Alt + Enter】,则会在其上方新插入一行
def show_text(text,a):
a+=1
print(text,a)
效果
def show_text(text,a):
a+=1
print(text,a)
9. 在下方插入新行【Shift + Enter】
同上
10. 上下移动选中代码【Alt + Shift + 上、下键】
如果我们想将下面代码的a=1
移动到print('click')
上方,可以在a=1
的所在行按下【Alt + Shift + 上】将其移动
def click(path):
print('click')
a = 1
效果
def click(path):
a = 1
print('click')
向下移动则按【Alt + Shift + 下】即可!
11. 上下移动选中方法体【Ctrl + Shift + 上、下键】
如果我们想将下面的send
方法移动到click
方法的上方,可以在send
方法名这行(def 所在行)按下【Ctrl + Shift + 上】即可
def click(path):
print('click')
def send(path):
print('send')
效果
def send(path):
print('send')
def click(path):
print('click')
向下移动则按【Ctrl + Shift + 下】即可!
12. 复制代码【Ctrl + D】
如果我们想复制一行代码,可以在相应代码行按下【Ctrl + D】
x=y=z=1
效果
x=y=z=1
x=y=z=1
也可以选中多行代码进行复制
def show_text(text,a):
a+=1
print(text,a)
效果但需要自己换行
def show_text(text,a):
a+=1
print(text,a)def show_text(text,a):
a+=1
print(text,a)
13. 折叠代码【Ctrl + -】
想折叠下面的代码的话,可以选中代码再按下【Ctrl + -】
def show_text(text,a):
a+=1
print(text,a)
效果
def show_text(text,a):...
14. 展开代码【Ctrl + +】
同上
15. 将代码抽取为一个方法【Ctrl + Shift+M】
如果想将如下的代码,写到一个方法中的话,可以选中代码并按下【Ctrl + Shift+M】
y=1
y+=1
print(y)
然后重命名方法,再点击【ok】
效果
def test():
global y
y = 1
y += 1
print(y)
test()
16. 重命名文件【Shift+F6】
需要重命名文件名时,可以选择对应文件按下【Shift+F6】,再输入框输入新的文件名再点击【Refactor】即可
17. 查找类被引用的地方【Ctrl+N】
按下【Ctrl+N】输入类的关键字,就可以看到被引用的类,点击对应的条目可跳转到对应文件
18. 查找/全局查找【Ctrl+F / Ctrl + Shift+F】
当前文件的查找可以按下【Ctrl+F 】并输入要查找的关键字就会高亮包含关键字的代码
点击图中红款的箭头,可以逐行查看包含关键字的代码;另外,按下【Shift + F3】或【F3】也可以实现!
点击红框中的窗口图标,可以打开TOOL窗口进行多窗口查询
效果
全局查询的话按下【Ctrl + Shift+F】即可!
19. 替换/全局替换【Ctrl+R / Ctrl + Shift+R】
当前文件的替换可以按下【Ctrl+R 】并在第一栏输入要替换的关键字就会高亮包含关键字的代码,第二栏输入要替换为的关键字,在按下【replace】或【replace All】(替换全部)
效果
全局替换的话按下【Ctrl + Shift+R】即可!
20. 快速跳转报错的代码【F2】
当出现代码报错的时候,可以按下F2快速跳转到报错的代码处
21. 定义一个书签【F11】
在相应代码处按下【F11】可以将其定义为一个书签
再按下【Shift+F11】,可以查看书签对应的代码
22. 代码小写转大写【Ctrl + Shift+U】
如果想将下面的代码转为大写,可选中代码后按下【Ctrl + Shift+U】
product_nama_dict={}
效果
PRODUCT_NAMA_DICT={}
23. 进入一个方法【Ctrl + B / Ctrl +鼠标左键】
如果想进入time模块的方法中去,可以选中【time】再按下【Ctrl + B 】,或者按下【ctrl+鼠标左键】效果
24. 快捷查看方法的实现(源码)【Ctrl + Shift + I】
如果我们想看【time】是如何实现的,可以选中并按下【Ctrl + Shift + I】
import time
time.sleep()
效果
25. 查看文档描述【Ctrl + Q】
如果我们想看【time】的文档,可以选中并按下【Ctrl + Q】
import time
time.sleep()
效果
26. 查看文件中的方法【Ctrl + F12】
按下【Ctrl + F12】可以看该文件中有哪些方法、类
27. 最近编辑的文件列表【Ctrl + E】
28. 快捷运行代码【Shift + F10】
快捷运行当前文件代码
29. 快捷调试代码【Shift + F9】
快捷调试当前文件代码
30. 快捷切换视图/目录【Ctrl + Tab】
31. 查看最近更改【Alt + Shift + C】
32. 将光标移动到代码行尾【End】
当你的代码很长的时候,已经超过屏幕显示范围了!
可以按下【End】(笔记本一般为【Fn+End】)可以跳转到行尾
按下【Home】(笔记本一般为【Fn+Home】)可回到行首!
33. 全选一行并移至行尾【Shift + End】
34. 查看历史粘贴复制记录【Ctrl + Shift+ V】
按下【Ctrl + Shift+ V】可以查看历史的复制粘贴记录
选择任意一行可以将它恢复回来
@api_view(['PATCH'])
@permission_classes((IsAuthenticated,))
def set_client_debug(request):
Client.objects.filter(user_id=request.user.id).update(debug=request.data['debug'])
return Response(data={'code': 0})
35. 将光标移动到方法体或循环的开始【Ctrl + {】
当你的方法或循环体很长的时候,可以按下【Ctrl + {】回到函数或循环头
36. 将光标移动到方法体或循环的结束【Ctrl + }】
当你的方法或循环体很长的时候,可以按下【Ctrl + }】回到函数尾或循环尾
37. 最大化编辑代码窗口【Ctrl + Shift + F12】
当我们打开了多窗口的时候,影响了代码编辑体验的时候,如下图所示,可以按下【Ctrl + Shift + F12】隐藏其他窗口
38. 快捷添加代码【Ctrl + J】
按下【Ctrl + J】可以快速添加代码
例如添加if __name__ == __main__
,点击上图的【main】即可:
if __name__ == '__main__':
PyCharm+Docker:打造最舒适的深度学习炼丹炉
一般炼丹都在服务器上,很少有人在本机跑代码的。之前自己捣鼓怎么用本地的编辑器配上远程服务器的环境来营造一个最舒乎的姿势。最开始用VS Code的SFTP插件,但是用着还是不顺手,因为不能用远程的环境,最后还是选择了强大的PyCharm。
开始之前你可以对比以下条件来确定自己是否真的需要这样做:
- 使用PyCharm作为主力IDE写Python而不是其他(我非常推荐大家用)
- 深度学习炼丹师(当然你可以不是,但如果是,你会更舒服)
- 服务器在远程或者局域网(局域网的体验最佳)
- 使用Docker(能够熟练使用最佳)
当你配置完成之后,你将能在本地PyCharm IDE上使用远程服务器的Python解释器和环境进行调试和运行,同时能够很方便的将代码在本地和服务器上进行同步。
OK,废话不多说,正式开始我们的PyCharm+Docker的远程环境配置之旅。
首先你需要满足以下两个必备条件:
- 使用PyCharm专业版,记住一定是专业版(社区版不提供远程服务)
- 在服务器上安装docker和nvidia-docker
新建docker container
首先按照如下命令新建一个docker容器:
sudo nvidia-docker run -it -p [host_port]:[container_port](do not use 8888) --name:[container_name] [image_name] -v [container_path]:[host_path] /bin/bash
举个栗子:
sudo nvidia-docker run -p 5592:5592 -p 5593:5593 -p 8022:22 --name="liuzhen_tf" -v ~/workspace/liuzhen/remote_workspace:/workspace/liuzhen/remote_workspace -it tensorflow/tensorflow:latest-gpu /bin/bash
正确执行完之后,现在我们就处在新建的docker容器里了(端口映射,容器名,镜像和路径映射这些换成你自己的就行,但是一定要留一个端口映射到容器22端口,因为SFTP默认使用22端口)。
配置SSH服务
接着我们在刚刚新建的容器里配置SSH服务,首先安装openssh-server:
$ apt update
$ apt install -y openssh-server
然后建立一个配置文件夹并进行必要的配置:
$ mkdir /var/run/sshd
$ echo 'root:passwd' | chpasswd
# 这里使用你自己想设置的用户名和密码,但是一定要记住!
$ sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
$ sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
$ echo "export VISIBLE=now" >> /etc/profile
如果连不上SSH服务,可能是某些版本的PermitRootLogin yes默认被注释了,可以使用如下:
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
重启SSH激活配置:
$ service ssh restart
在服务器(宿主机)上(不是服务器的docker里)测试刚刚新建docker容器中哪个端口转发到了服务器的22端口:
$ sudo docker port [your_container_name] 22
# 如果前面的配置生效了,你会看到如下输出
# 0.0.0.0:8022
最后测试能否用SSH连接到远程docker:
$ ssh root@[your_host_ip] -p 8022
# 密码是你前面自己设置的
到这里说明服务器的docker端已经完成配置。
在PyCharm里配置部署环境
打开PyCharmTools > Deployment > Configuration, 新建一个SFTP服务器,名字自己取:
输入如下图配置,注意这里的端口是你刚刚设置的映射到容器22端口的宿主机中的端口,我这里使用的是8022,账号密码是你刚刚自己设置的,这里的Root Path设置一个远程docker容器里的路径:
配置完点击Test SFTP connection,如果成功就恭喜你,可以进行下一步了。
最后在Mappings中配置路径,这里的路径是你本地存放代码的路径,与刚刚配置的Root Path相互映射(意思是Mapping里本机的路径映射到远程的Root Path),方便以后在本地和远程docker中进行代码和其他文件同步。
在PyCharm里配置远程解释器
点击PyCharm的File > Setting > Project > Project Interpreter右边的设置按钮新建一个项目的远程解释器:
配置完成以后在项目解释器界面就会出现如下图所示,可以看到此时已经完成远程解释器的本地化:
配置完成以后需要等本地和远程的环境同步一下,到这里,恭喜你,可以用最舒服的姿势。。。写代码了。
配置完成以后的日常是这样的:
左边是本地的文件,修改之后可以随时右键deployment->upload到远程主机,或者直接在本地调试运行;最右边是远程主机的文件,假如直接在远程修改了文件刷新一下同样可以右键下载到本地,但是我不建议这样做,因为这样很容易带来冲突(毕竟没有很好的版本控制)。目前最好的实践是在局域网的服务器上,时延低,同步速度快。
常见问题
- 最常见的问题就是docker容器停了以后里面的SSH服务也会相应停止,因此当你发现自己某一天连不上的时候,记得去docker里重启一下ssh服务:
$ service ssh restart
解决方案:
“可以在run的时候加上–restart=always,同时ssh启动的写到dockerfile里去。”
- 在容器中执行apt update的时候可能会出现0% working 的问题:
解决方案:
”这里不是源的问题,因为容器环境太过纯净,这里需要安装apt-transport-https这个deb文件,下载的时候也要注意不要下载最新的版本,否则也会出现依赖问题,要下载和当前docker容器内的apt相匹配的版本。“