Menu

  • Home
  • Work
    • Cloud
      • Virtualization
      • IaaS
      • PaaS
    • Java
    • Go
    • C
    • C++
    • JavaScript
    • PHP
    • Python
    • Architecture
    • Others
      • Assembly
      • Ruby
      • Perl
      • Lua
      • Rust
      • XML
      • Network
      • IoT
      • GIS
      • Algorithm
      • AI
      • Math
      • RE
      • Graphic
    • OS
      • Linux
      • Windows
      • Mac OS X
    • BigData
    • Database
      • MySQL
      • Oracle
    • Mobile
      • Android
      • IOS
    • Web
      • HTML
      • CSS
  • Life
    • Cooking
    • Travel
    • Gardening
  • Gallery
  • Video
  • Music
  • Essay
  • Home
  • Work
    • Cloud
      • Virtualization
      • IaaS
      • PaaS
    • Java
    • Go
    • C
    • C++
    • JavaScript
    • PHP
    • Python
    • Architecture
    • Others
      • Assembly
      • Ruby
      • Perl
      • Lua
      • Rust
      • XML
      • Network
      • IoT
      • GIS
      • Algorithm
      • AI
      • Math
      • RE
      • Graphic
    • OS
      • Linux
      • Windows
      • Mac OS X
    • BigData
    • Database
      • MySQL
      • Oracle
    • Mobile
      • Android
      • IOS
    • Web
      • HTML
      • CSS
  • Life
    • Cooking
    • Travel
    • Gardening
  • Gallery
  • Video
  • Music
  • Essay

IntelliJ平台知识集锦

30
Oct
2015

IntelliJ平台知识集锦

By Alex
/ in Work
/ tags IntelliJ
0 Comments
特性简介

IntelliJ是JetBrains公司的一个基础软件平台,主要用于构建IDE。IDEA、WebStorm、PHPStorm、CLion、PyCharm、RubyMine、DataGrip、Android Studio等IDE均基于此平台构建。本文记录通用于这些IDE的知识。 

工具窗口

IntelliJ中在编辑器左侧、下面、右侧的若干小面板,被称为工具窗口。工具窗口名字前面可能有N: 前缀,你可以使用Alt + N快速切换到此工具窗口。

大部分工具窗口支持快速搜索(Speed Search)功能,你只需要聚焦目标工具窗口,然后直接输入你需要搜索的内容,即可定位到匹配条目。

视图模式

IntelliJ引入视图模式这一特性,允许IDE以不同方式呈现:

视图模式 说明
Full Screen mode 全屏模式,占据最大的空间。操作系统任务栏、菜单栏等自动隐藏
Presentation mode 演示模式,类似于全屏模式,字体很大,用于投影展示
Distraction-free mode 免打扰模式,仅仅居中显示代码,工具窗口、工具栏、编辑器标签都隐藏
自动完成

IntelliJ支持比较智能化的代码提示(Code Assist),在你输入的时候匹配的候选代码提示会自动出现。匹配方式不仅仅限于前缀,不连续的字符也可以用于筛选匹配,例如输入mtm可以匹配myTestMethod方法。

对于JavaScript等动态语言,IntelliJ可以分析得到工程中所有的变量、函数名称,用于代码提示,而不考虑代码的上下文,例如:

JavaScript
1
2
3
4
var cmp = null;
// 输入到cmp.init,IDEA即可给出initRenderData提示,这是因为在工程的某个文件中定义了initRenderData()方法
// 尽管从山下文判断,此提示是不正确的
cmp.initRenderData();

这种提示方式很有效,特别是在记不清函数名称的时候,但是工程中代码过多时,IntelliJ会消耗大量时间分析代码,造成卡顿。 

IntelliJ支持独特的Postfix自动完成,你可以输入 false.if 来得到 if(false){} 。

LiveTemplate

IntelliJ支持自定义模板代码,这些代码可以插入到当前编辑器中,或者环绕当前编辑器中被选中的代码。

要自定义LiveTemplate,可以Settings ⇨ Editor ⇨ Live Templates,然后点击右侧的add按钮添加新的模板。你可以为模板设置一个缩写,这样,在编辑器里输入缩写后,按Tab即可自动完成。

要插入模板,可以使用Intellij的智能提示,或者使用快捷键:Ctrl + J、Ctrl + Alt + J。

模板变量

预定义变量:

变量 说明
$SELECTION$ 代表当前编辑器的选区
$END$ 代表光标位置,在插入模板后,光标将停留于此

Live template的强大之处在于,它允许你自定义模板变量,变量的值可以从IntelliJ提供的大量函数中推导出。这样,你就可以很方便的在模板在插入上下文信息,例如类名、方法名、当前时间等信息。例如下面的Live template,它可以向当前Java类中插入日志记录器的声明语句:

livetemplate-with-var

全局设置
设置路径 说明
A&B ⇨ Apperance

UI Options
Theme:Ubuntu下选择GTK+,Wndows下选择Intellij
Override default fonts by:Ubuntu下选择Ubuntu/14,Wndows下选择Segoe UI/12
Window Options
勾选Show memory indicator、WdeScreen tool window layout

A&B ⇨ System Settings Synchronization
勾选Save files automatically if application idle for 15 sec 
⇨ Updates
取消勾选 Automatically check updates for ..
⇨ Usage stat.
取消勾选 Allow sending usage statistics to JetBrains
A&B ⇨ Path Variables MAVEN_REPOSITORY
Ubuntu下设置为~/JavaEE/maven/maven_repository
Windows下设置为D:\JavaEE\maven\maven_repository
Keymap

考虑到需要使用多套IDE、操作系统,过度差异的快捷键容易造成记忆混乱,因此选择Keymaps为Eclipse,并在其基础上做调整
清除以下快捷键:
Ctrl + F6、Ctrl + Shift + F6、Ctrl + F9、Ctrl + Shift + F8、Alt + Shift + F9、Alt + Shift + F10、Ctrl + W、Ctrl + Shift + W、Alt + Shift + X、Alt + Shift + D、Alt + Shift + Z

添加以下快捷键:
Class Name Completion:添加Alt + /
Main Menu ⇨ Force Step Over:添加 Shift + F6
Main Menu ⇨ Force Step Into:添加 Shift + F5
Main Menu ⇨ Force Run to Cursor:改为Ctrl + Alt + R
Main Menu ⇨ Run ⇨ Debug:改为F9
Main Menu ⇨ Run ⇨ Run:改为F10
Main Menu ⇨ Run ⇨ Debug...:改为Shift + F9
Main Menu ⇨ Run ⇨ Run...:改为Shift + F10
Main Menu ⇨ Code ⇨ Insert Live Template:添加 Ctrl + J
Main Menu ⇨ Code ⇨ Completion ⇨ Basic:改为Alt + Space
Main Menu ⇨ View ⇨ Parameter Info:添加Alt + P
Other ⇨ Search Everywhere:添加Ctrl + Shift + Q
Editor Actions ⇨ Extend Selection:添加Ctrl + W
Editor Actions ⇨ Shrink Extend Selection:添加Ctrl + Shift + W

Editor ⇨ General

Other
勾选Show quick documentation on mouse move

Appearance
勾选Show line numbers
取消勾选Show right margin
取消勾选Show vertical indent guides

Code Completion
勾选Autopopup documentation in(ms)

Editor ⇨ Colors & Fonts

Scheme另存以便修改
Font
Primary font:Ubuntu下选择Ubuntu mono/16;Windows下选择Consolas/14 
Line spacing: 选择1.1
Secondary font:Windows下选择XCross Mono.clear
Language Defaults
Comments中,把Block Comment、Line Comment、Doc Comment/Text的斜体勾选去掉
Console Font
Primary font:Ubuntu下选择Ubuntu mono/14;Windows下选择Consolas/12
Secondary font:Windows下选择XCross Mono.clear

Ubuntu下使用GTK+主题时,参考下面设置
General
Editor ⇨ Selection Background,设置为F07746
Debugger ⇨ Execution point,取消Foreground,下面两个设置为C6DBAE、ADDB7C
Debugger ⇨ Inlined values for breakpointline,前景色设置为FFFFFF

Editor ⇨ Code Style 导入配置 intellij-code-style.xml
Editor ⇨ Inspections 取消勾选Spelling  ⇨ Typo 
B,E,D  ⇨ Debugger Build-in server Port设置为8800
B,E,D ⇨ Maven

Maven home directory:D:/JavaEE/maven/3.2.3
User settings file:D:\JavaEE\config\maven-settings.xml

常用快捷键

下表列出的快捷键,基于Eclipse方案修改得到:

分类 快捷键 说明
工具和视图 Ctrl + Alt + S 弹出设置对话框  
Ctrl + Tab
Ctrl + Shift + Tab
弹出小窗格,在其中快速切换编辑器窗口和视图窗口
Win/Opt + R 弹出小窗格,显示最近打开的文件列表
Alt/Cmd + R 弹出小窗格,显示最近修改的文件列表
Ctrl + Alt/Cmd + Left
Ctrl + Alt/Cmd + Right
在打开的编辑器Tab页之间切换
Alt/Cmd + Shift + Left  切换到上一个编辑位置
Alt/Cmd + Shift + Right  切换到下一个编辑位置
Alt/Cmd + Left
Alt/Cmd + Right

在编辑器Tab页之间切换

但是依据你针对编辑器页签的操作情况,可能在同一个编辑器页签中多次切换光标位置,而不是立即切换到上一个页签

Win/Opt + 0 Favorites工具窗口
Win/Opt + 1 Project工具窗口
Win/Opt + 2 Structure工具窗口
Win/Opt + 3 Hierarchy工具窗口
Win/Opt + 4 Maven Projects工具窗口
Win/Opt + 5 Database工具窗口
Alt/Cmd + 0 Terminal工具窗口
Alt/Cmd + 3 Event Log工具窗口
Alt/Cmd + 4 Docker工具窗口
Alt/Cmd + 5 Debug工具窗口
Alt/Cmd + 6 Run工具窗口
Alt/Cmd + 7 TODO工具窗口
Alt/Cmd + 8 Version Control工具窗口
Ctrl + Shift + ESC 关闭所有工具窗口
Ctrl + Esc 关闭当前活动工具窗口
Alt/Cmd + T,T 在Hierarchy工具窗口中显示类型的层次关系
Alt/Cmd + T,M 在Hierarchy工具窗口中显示方法覆盖的层次关系
Alt/Cmd + T,C 在Hierarchy工具窗口中显示方法调用的层次关系
Delete
Alt/Cmd + Backspace
删除文件
构建/运行 Ctrl + B 构建工程
Win/Opt + B 构建模块
Alt/Cmd + B 对于IDEA:构建构件
对于CLion:构建工程
对于AppCode:构建工程
Ctrl  + F10 运行当前文件(上下文配置)
Ctrl  + F9 调试当前文件(上下文配置)
Shift + F10 弹出菜单,选择一个文件并运行
Shift + F9 弹出菜单,选择一个文件并调试
F10 运行当前Run/Debug配置
F9 调试当前Run/Debug配置
F11 停止运行当前程序
F12 对于IDEA:更新当前Java应用
对于PhpStorm:上传到默认服务器
F5 Step Into,跳过Step过滤器中包含的库、构造器等代码
Shift + F5 强制Step Into,忽略Step过滤器的设置
Ctrl + F5 智能Step Into,允许你选择Step Into哪个方法
F6 Step Over
Shift + F6 强制Step Over,忽略任何断点
F7 Step Out
F8 释放单步跟踪,继续运行到下一断点
Win/Opt + Space 释放单步跟踪,运行到光标所在行
Ctrl + Win/Opt + Space 释放单步跟踪,强制运行到光标所在行,忽略任何断点
Alt/Cmd + E 调试模式下,临时估算一个表达式的值
要持续监测表达式,在Debug工具窗口中的Debugger  ⇨ Watches中添加表达式
Ctrl + Shift + B 添加/删除当前行的断点
Alt + Shift + B 启用/停用当前行的断点
Ctrl + Shift + M 启用/停用当前行的书签
Ctrl + W 关闭当前项目
编辑器 Alt/Cmd + G 生成新代码,例如添加构造器、getter/setter方法
Alt/Cmd + J 插入一个活动模板(Live Template) 
Alt/Cmd + S,S 以...包围
Alt/Cmd + S,J 以活动模板包围
Shift + Enter 在当前行后面插入新行,并定位光标到新行
Ctrl + Shift + Enter 在当前行前面插入新行,并定位光标到新行
Ctrl + Enter 在光标所在位置后面插入换行符
Ctrl + Alt + Enter 完成当前语句,添加缺少的括号、分号等  
Alt/Cmd + O 快速大纲(当前文件结构)  
Ctrl + Alt + U 显示选中类/接口的类图(只显示超类)
Alt/Cmd + P 方法调用的参数类型提示
Alt/Cmd + Up
Alt/Cmd + Down
上下移动当前行
Alt/Cmd + D 删除当前行
Ctrl + / 注释/解除注释当前行
Ctrl + Shift + / 块注释
Alt/Cmd + +
Alt/Cmd + -
展开/折叠代码块
Ctrl + Alt + O 清理导入(Java的import、C的include等)
Ctrl + Shift + F 格式化当前文档
Ctrl + Shift + L 排序代码
Alt/Cmd + W
Alt/Cmd + Shift + W
扩展/收缩选区
Win/Opt + W 关闭当前编辑器窗口
Win/Opt + , 上一个高亮错误
Win/Opt + . 下一个高亮错误
Alt/Cmd + , 上一个编辑器内搜索匹配结果
Alt/Cmd + . 下一个编辑器内搜索匹配结果
Alt/Cmd + Shift + , 上一个搜索匹配结果
Alt/Cmd + Shift + . 下一个搜索匹配结果
Ctrl  + Alt/Cmd + Up 上一个差异(文件对比弹框)
Ctrl + Alt/Cmd + Dn 下一个差异(文件对比弹框)
Ctrl  + Alt/Cmd + Left 比较上一个文件
Ctrl  + Alt/Cmd + Right 比较下一个文件
Alt/Cmd + Mouse3 列选择模式
Ctrl + Shift + Up 上一个方法
Ctrl + Shift + Down 下一个方法
搜索 F3

转到类型、方法的声明

如果在方法声明上调用此快捷键,则寻找该方法的使用情况

备用快捷键: Ctrl  + Mouse1

Win/Opt + F 查找选中符号(字段、方法)的引用(调用)  
Win/Opt + Shift + F 查找选中符号在当前文件中的引用
Alt/Cmd + F

在当前文件中查找/替换

Alt/Cmd + , 上一个匹配
Alt/Cmd + . 下一个匹配

Ctrl + F 在选中的路径下查找包含内容的文件
Ctrl + R 在选中的路径下,查找包含内容的文件,并且替换这些内容
Ctrl + Shift + A 快速动作或者选项  
Ctrl + Shift + R 快速打开文件  
Ctrl + Shift + T 快速打开类  
Ctrl + Shift + Alt + N 快速定位到符号(方法、字段)
Ctrl + Shift + Q Search Everywhere功能。可以依据文件名查找类、资源文件,可以查找符号名称、Action等(搜索结果是上面4个快捷键的集合)
默认键盘布局下是Shift, Shift  

智能化

Alt/Cmd + Enter 意图操作(Intention Action),根据上下文猜测你可能想做的事情
Alt/Cmd + / 触发智能提示
重构 Ctrl + Shift + Alt/Cmd + R 弹出重构菜单
Alt/Cmd  + Delete 安全删除
Shift + Alt/Cmd + R 重命名
Shift + Alt/Cmd + S 改变方法签名
Shift + Alt/Cmd + V 抽取局部变量
Shift + Alt/Cmd + F 抽取字段
Shift + Alt/Cmd + C 抽取常量
Shift + Alt/Cmd + C 修改方法签名
Shift + Alt/Cmd + M 抽取方法
Shift + Alt/Cmd + P 抽取参数
Shift + Alt/Cmd + L 转换为Lambda表达式
Shift + Alt/Cmd + I 将方法调用内联
版本控制 F4 显示上下文敏感的版本控制操作
Ctrl + Alt/Cmd + U 更新工程、目录或者文件
Ctrl + Alt/Cmd + A 添加选中文件到版本控制  
Ctrl + Alt/Cmd + Z 回退选中的文件
Ctrl + Alt/Cmd + A 查看选定修订版影响的全部文件,你可以在弹出窗口中执行回退操作
Ctrl + Alt/Cmd + V 查看选中目录/文件的VCS历史
Ctrl + Alt/Cmd + P Git Push操作
Ctrl + Alt/Cmd + Shift + P Gti Pull操作
Ctrl + Alt/Cmd + / Git Stash操作
Ctrl + Alt/Cmd + Shift + / Git Unstash操作
Ctrl +Alt/Cmd + " Git Branches
集成版本控制
变更集

Change list是一个很体贴的功能,它允许你把纳入版本控制的文件分组,每次只提交其中的一组。某些配置文件需要针对本地环境修改,每个开发者都不一样。这些本地修改不能提交到VCS,这时可以把它们添加到另外一个变更集中,防止误提交。

在提交对话框中,左面板的又上角由一个Change list下拉框,你可以选择当前要提交的变更集:

change-list

左侧待提交文件列表中,你可以右击任何目录、文件,修改它们所属的变更集。

使用GitHub
GitHub相关设置

Settings  ⇨  Version Control  ⇨ GitHub,在这里设置你的GitHub用户名和密码

Settings  ⇨  Version Control  ⇨ Git:

  1. Auto-update if push of the current branch was rejected:如果勾选,当Push失败后,会自动从远程仓库拉取更新
  2. Allow force push:是否允许强制Push
分享当前项目到GitHub

VCS ⇨ Import into Version Control ⇨ Share Project on GitHub,弹出下面的对话框:

Share Project On GitHub_002点击Share后,IDE会使用你的账号,在GitHub上面创建一个空白的裸仓库。

在下一个弹出的对话框中,你可以选择需要添加的文件,并提交。

注意,提交仅仅是针对你本地的Git仓库。要Push到GitHub,需要VCS ⇨ Git ⇨ Push(Eclipse方案下快捷键为Ctrl + Shift + K) :Push Commits_003

可以看到,本次Push会在远程仓库初始化master分支。在后续的开发过程中,你随时可以把本地的Tag一同Push到远程仓库。

Git Log解读

git-log-1

上图中:

  1. 当前位于develop分支上,看黄色标签
  2. 本地仓库的develop分支,和远程仓库的develop分支,处于同步状态,看绿色标签和紫色标签重合
  3. 本地仓库的master分支位于commit4(绿色标签),远程仓库的master分支位于commit5(紫色标签)

在此时,你可以点击右下角 Git:develop ⇨ Remote Branches ⇨ Merge,把任意分支合并到develop分支。例如,合并master分支,之后Git Log变为:

git-log-2

可以看到,合并后默认自动提交。现在的情况是,本地仓库的develop和远程的develop不同步了。你可以执行一下Push:

git-log-3

这时develop分支的绿、紫标签又在一起了。

在develo commit 3(57a408d)上右击,Reset Current Branch to Here ... ⇨ Hard,现在变为:

git-log-4

注意黄色小标的位置。

我们可以强制Push版本57a408d到远程仓库,替换掉最新的673bb5c。在Push弹窗中,点击右下角Push按钮的下箭头,选择Force Push。提交后,服务器的develop分支的版本变的和本地一致:

git-log-5

其它开发人员,切换到develop分支后,执行Update Project,紫色标签的位置和远程仓库(被强制Push的)变的一致:

git-log-6 这时,此开发人员比远程仓库多出来的develo commit 6,可以Push,也可以右键  ⇨ Undo Commit,撤销掉提交。提交撤销后,其导致的修改将存在于当前工作区。

常见问题
主题定制

这里提到的主题,是指IDE本身的组件(例如菜单、按钮)的样式风格。和编辑器色彩方案不同,Intellij平台没有提供细粒度的控制,只允许用户在三个预置的主题中选择。

最近Intellij平台下的IDE分别发布2016.1版本,升级后,我注意到Linux下的GTK+主题存在BUG,编辑器面板等地方出现多余灰色边框(IDEA-152424),非常难看。等了几个月了,这个BUG还没有修复,为了拯救完美主义强迫症的自己,动手改吧……

我的想法是,把默认的Intellij主题中的蓝色调改为Ubuntu的橙色调风格,而不是去修复GTK+主题。这主要是考虑到默认主题在三大OS上都大量使用,JetBrains在此主题上花费的精力会比较多。相比之下,Linux下的GTK+主题由于用户较少,一直存在各种BUG。

虽然没研究过Intellij平台的源码,但是既然它是基于Swing的,我觉得应该找一些和LookAndFeel有关的类作为代码分析的入口。

我以CLion为例尝试。打开lib目录下最大的jar包,反编译,大概浏览了一下代码,发现com.intellij.ide.ui.laf包和主题相关,而IntelliJLaf类则对应了默认的IntelliJ主题。清空配置文件intellijlaf.properties的内容,启动CLion后发现完全界面完全变样了,由此推断,修改此配置文件是最简单的主题定制方式。修改并测试后,以下配置项被调整:

intellijlaf.properties
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
# 面板中选区的背景色
intellijlaf.selectionBackground=F07746
# 复选框边框,上半部分
CheckBox.darcula.borderColor1.selected=CC5627
# 复选框边框,下半部分
CheckBox.darcula.borderColor2.selected=CC5627
# 复选框背景,上半部分
CheckBox.darcula.backgroundColor1.selected=F58456
# 复选框背景,下半部分
CheckBox.darcula.backgroundColor2.selected=EC7B4D
# 选中复选框中的小钩子的阴影色
CheckBox.darcula.shadowColor.selected=90553C
# 获得焦点的复选框的颜色
CheckBox.darcula.focusedArmed.backgroundColor1.selected=F58456
CheckBox.darcula.focusedArmed.backgroundColor2.selected=EC7B4D
CheckBox.darcula.focused.backgroundColor1.selected=E7976D
CheckBox.darcula.focused.backgroundColor2.selected=E7976D
# 下拉列表箭头颜色
ComboBox.darcula.arrowFillColor=D96334
ComboBox.darcula.arrowFocusedFillColor=EC7B4D
# 按钮背景颜色
Button.darcula.selection.color1=EC7B4D
Button.darcula.selection.color2=CC5627
# 数字字段按钮背景色
Spinner.darcula.enabledButtonColor=D96334
# 树选区边框颜色
Tree.selectionBorderColor=D96334

保存并更新压缩包后,重启CLion,可以发现一部分UI组件的配色改变了,但是聚焦的按钮、搜索框、复选框、单选框等组件依然会显示出蓝色。

其实切换到到深色主题Darcula,会发现那种蓝色也是存在的。进一步查看代码,可以发现IntelliJLaf的父类是DarculaLaf,原来浅色主题是从深色主题继承扩展而来的(比较反直觉…)。对某些控件加上蓝色发光效果,是DarculaLaf了类具有的一个行为,IntelliJLaf可能仅仅是继承了这一行为。

继续分析了一会代码,发现com.intellij.ide.ui.laf.darcula.DarculaUIUtil类中硬编码了发光效果的颜色,修改该类的两个成员,编译后替换同名文件:

com.intellij.ide.ui.laf.darcula.DarculaUIUtil.java
Java
1
2
3
4
5
6
public class DarculaUIUtil {
    public static final Color GLOW_COLOR = new JBColor(new Color(204, 86, 39), new Color(240, 119, 70));
    private static Color a() {
        return new JBColor(new Color(204, 86, 39), new Color(240, 119, 70));
    }
} 

以上步骤都完毕后,单选框还是顽固的蓝色,呵呵,又一个硬编码的颜色需要修改:

com.intellij.ide.ui.laf.darcula.ui.DarculaRadioButtonUI.java
Java
1
2
3
4
5
6
public class DarculaRadioButtonUI extends MetalRadioButtonUI {
    protected void paintIcon(JComponent var1, Graphics2D var2, Rectangle var3, Rectangle var4) {
        ...
        JBGradientPaint var11 = new JBGradientPaint( var1, new Color(240, 119, 70), new Color(204, 86, 39) );
    }
} 

最终效果的截图在这里,只是把IntelliJ主题的蓝色系改为橙色系,但是和Ubuntu系统很搭配呢。

编辑器选区背景颜色

这个可以通过IDE设置:Settings ⇨ Editor ⇨ General,展开到Editor ⇨ Selection background,修改为F07746。该设置不但影响编辑器窗口,还会影响到Terminal、Messages、Event Log等基于文本的Tool window。

零散问题
如何把当前的IDE布局保存为默认值

Window ⇨ Store Current Layout as Default

Ubuntu下如何启用全局菜单栏(Global Menu)

安装jayatana:

Shell
1
2
3
sudo add-apt-repository ppa:danjaredg/jayatana
sudo apt-get update
sudo apt-get install jayatana

修改IntelliJ的配置文件:

/home/alex/JavaEE/ide/idea/15.0.5/bin/idea64.vmoptions
1
2
# 添加下面的内容
-javaagent:/usr/share/java/jayatanaag.jar

此方法适用于任何Swing程序。

最新版本(至少2018)版本的Intellij,不再需要jayatana,而且jayatana可能导致Intellij功能异常。要启用全局菜单,搜索Action ,Experimental Features,勾选 linux.native.menu

改善Ubuntu下的字体渲染效果

安装修复过字体渲染的OpenJDK:

Shell
1
2
3
sudo add-apt-repository ppa:no1wantdthisname/openjdk-fontfix
sudo apt-get update
sudo apt-get install openjdk-7-jdk

修改IntelliJ的配置文件:

/home/alex/JavaEE/ide/idea/15.0.5/bin/idea64.vmoptions
1
2
3
4
5
# 添加下面的内容
-Dawt.useSystemAAFontSettings=lcd
-Dswing.aatext=true
-Dsun.java2d.xrender=true
-Dsun.java2d.pmoffscreen=false

修改IntelliJ的启动脚本,使用刚下载的OpenJDK:

idea.sh
Shell
1
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64

更进一步,可以安装Infinality,提升Ubuntu下字体渲染。

界面乱码问题

Ubuntu14下的基于IntelliJ平台的IDE,有两个地方可以设置字体:

  1. A & B ⇨ Appearance,Override Default fonts by 。这里可以设置IDE界面字体,包括菜单、Tool Window、Quick documentation弹窗等
  2. Editor ⇨ Color & Fonts ⇨ Font。这里可以设置编辑器字体

默认情况下,系统语言设置为中文时,不进行任何设置就可以正常显示中文。

如果设置上面的第1项,需要保证选中的字体中包含中文字符的支持,否则很多地方的中文会显示为空心小方块。

最新的2016版本发布后,IntelliJ平台内置了修改后的Open JDK,提升了字体渲染效果,而且比进行过Fontfix的Open JDK字体更加清晰。试用后发现,系统语言设置为英文时,Quick documentation弹窗、搜索框中的中文都是乱码。除了把1设置为某种中文字体。

问题是,英文系统下默认字体“Ubuntu”比其它字体美太多,实在不想弃用。所以我把Wenquanyi Micro Hei中的中文合并到Ubuntu中,生成一个新字体“Ubuntu Micro Hei”,调整Hint后,发现英文部分显示效果和Ubuntu字体几乎无差,中文也支持了。下面是截图:Selection_005怎么样,是不是觉得比Mac OS X的渲染效果还惊艳giggle(注:安装了Infinality,并且渲染风格设置为OS X;IntelliJ中字体Antialiasing设置为Subpixel)

下面提供字体的下载链接:Ubuntu Micro Hei。

如何读懂Local History

只需要记住:右侧面板显示的是,当前时间点相对左侧选中的那个事件(时间点)发生之前,文件的差别:

  1. 如果某个文件当前是有的,那个时间点是没有的,文件名称显示为绿色
  2. 如果某个文件在两个时间点都存在,但是有改动,文件名称显示为蓝色
  3. 如果某个文件在当前是没有的,而那个时间点是有的,文件名称显示为灰色

示例截图:

-home-alex-JavaEE-projects-idea-pems-trunk-pems-pems-intelli-ctrl_001

在这个例子中。我们最后做了一条回退操作,在这之前,我们删除了两个文件,添加了一个文件。因而回退后,相对于回退前是添加了两个文件,删除了一个文件。 一定要明白“事件之前”而不是之后,如果是之后,那么Difference应该不存在。

macOS下反复要求输入SVN密码

首先在钥匙串应用中删除对应的条目,然后通过IntelliJ 进行SVN操作,根据提示输入密码、点击记住。后续系统会提示是否允许IntelliJ访问钥匙串,选择总是允许。

Ubuntu下无法使用Alt快捷键

在Ubuntu下,默认的你无法定制某些Alt + *的快捷键,原因是分配给Global菜单了。

要解决此问题,打开Settings ⇨ A & B ⇨ Appearance,右侧找到Window Options区域,勾选 Disable mnemonics ...

2017以后Ubuntu下中文输入闪烁

Inatellij 2017以后的版本,在Ubuntu下用IBUS输入中文,上屏时会出现闪烁。调试可以发现,它先渲染出一个英文字符大小的方框,然后在渲染出中文字符。

这个问题和零延迟渲染特性有关,设置系统属性 -Deditor.zero.latency.rendering=false即可解决。

← Linux的三种Init机制
基于Apache Cordova开发移动应用程序 →

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Related Posts

  • WebStorm知识集锦
  • IntelliJ IDEA知识集锦
  • CMake学习笔记
  • PhpStorm知识集锦
  • Protocol Buffers初探

Recent Posts

  • Investigating and Solving the Issue of Failed Certificate Request with ZeroSSL and Cert-Manager
  • A Comprehensive Study of Kotlin for Java Developers
  • 背诵营笔记
  • 利用LangChain和语言模型交互
  • 享学营笔记
ABOUT ME

汪震 | Alex Wong

江苏淮安人,现居北京。目前供职于腾讯云,专注容器方向。

GitHub:gmemcc

Git:git.gmem.cc

Email:gmemjunk@gmem.cc@me.com

ABOUT GMEM

绿色记忆是我的个人网站,域名gmem.cc中G是Green的简写,MEM是Memory的简写,CC则是我的小天使彩彩名字的简写。

我在这里记录自己的工作与生活,同时和大家分享一些编程方面的知识。

GMEM HISTORY
v2.00:微风
v1.03:单车旅行
v1.02:夏日版
v1.01:未完成
v0.10:彩虹天堂
v0.01:阳光海岸
MIRROR INFO
Meta
  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
Recent Posts
  • Investigating and Solving the Issue of Failed Certificate Request with ZeroSSL and Cert-Manager
    In this blog post, I will walk ...
  • A Comprehensive Study of Kotlin for Java Developers
    Introduction Purpose of the Study Understanding the Mo ...
  • 背诵营笔记
    Day 1 Find Your Greatness 原文 Greatness. It’s just ...
  • 利用LangChain和语言模型交互
    LangChain是什么 从名字上可以看出来,LangChain可以用来构建自然语言处理能力的链条。它是一个库 ...
  • 享学营笔记
    Unit 1 At home Lesson 1 In the ...
  • K8S集群跨云迁移
    要将K8S集群从一个云服务商迁移到另外一个,需要解决以下问题: 各种K8S资源的迁移 工作负载所挂载的数 ...
  • Terraform快速参考
    简介 Terraform用于实现基础设施即代码(infrastructure as code)—— 通过代码( ...
  • 草缸2021
    经过四个多月的努力,我的小小荷兰景到达极致了状态。

  • 编写Kubernetes风格的APIServer
    背景 前段时间接到一个需求做一个工具,工具将在K8S中运行。需求很适合用控制器模式实现,很自然的就基于kube ...
  • 记录一次KeyDB缓慢的定位过程
    环境说明 运行环境 这个问题出现在一套搭建在虚拟机上的Kubernetes 1.18集群上。集群有三个节点: ...
  • eBPF学习笔记
    简介 BPF,即Berkeley Packet Filter,是一个古老的网络封包过滤机制。它允许从用户空间注 ...
  • IPVS模式下ClusterIP泄露宿主机端口的问题
    问题 在一个启用了IPVS模式kube-proxy的K8S集群中,运行着一个Docker Registry服务 ...
  • 念爷爷
      今天是爷爷的头七,十二月七日、阴历十月廿三中午,老人家与世长辞。   九月初,回家看望刚动完手术的爸爸,发

  • 6 杨梅坑

  • liuhuashan
    深圳人才公园的网红景点 —— 流花山

  • 1 2020年10月拈花湾

  • 内核缺陷触发的NodePort服务63秒延迟问题
    现象 我们有一个新创建的TKE 1.3.0集群,使用基于Galaxy + Flannel(VXLAN模式)的容 ...
  • Galaxy学习笔记
    简介 Galaxy是TKEStack的一个网络组件,支持为TKE集群提供Overlay/Underlay容器网 ...
TOPLINKS
  • Zitahli's blue 91 people like this
  • 梦中的婚礼 64 people like this
  • 汪静好 61 people like this
  • 那年我一岁 36 people like this
  • 为了爱 28 people like this
  • 小绿彩 26 people like this
  • 杨梅坑 6 people like this
  • 亚龙湾之旅 1 people like this
  • 汪昌博 people like this
  • 彩虹姐姐的笑脸 24 people like this
  • 2013年11月香山 10 people like this
  • 2013年7月秦皇岛 6 people like this
  • 2013年6月蓟县盘山 5 people like this
  • 2013年2月梅花山 2 people like this
  • 2013年淮阴自贡迎春灯会 3 people like this
  • 2012年镇江金山游 1 people like this
  • 2012年徽杭古道 9 people like this
  • 2011年清明节后扬州行 1 people like this
  • 2008年十一云龙公园 5 people like this
  • 2008年之秋忆 7 people like this
  • 老照片 13 people like this
  • 火一样的六月 16 people like this
  • 发黄的相片 3 people like this
  • Cesium学习笔记 90 people like this
  • IntelliJ IDEA知识集锦 59 people like this
  • 基于Kurento搭建WebRTC服务器 38 people like this
  • Bazel学习笔记 37 people like this
  • PhoneGap学习笔记 32 people like this
  • NaCl学习笔记 32 people like this
  • 使用Oracle Java Mission Control监控JVM运行状态 29 people like this
  • Ceph学习笔记 27 people like this
  • 基于Calico的CNI 27 people like this
  • Three.js学习笔记 24 people like this
Tag Cloud
ActiveMQ AspectJ CDT Ceph Chrome CNI Command Cordova Coroutine CXF Cygwin DNS Docker eBPF Eclipse ExtJS F7 FAQ Groovy Hibernate HTTP IntelliJ IO编程 IPVS JacksonJSON JMS JSON JVM K8S kernel LB libvirt Linux知识 Linux编程 LOG Maven MinGW Mock Monitoring Multimedia MVC MySQL netfs Netty Nginx NIO Node.js NoSQL Oracle PDT PHP Redis RPC Scheduler ServiceMesh SNMP Spring SSL svn Tomcat TSDB Ubuntu WebGL WebRTC WebService WebSocket wxWidgets XDebug XML XPath XRM ZooKeeper 亚龙湾 单元测试 学习笔记 实时处理 并发编程 彩姐 性能剖析 性能调优 文本处理 新特性 架构模式 系统编程 网络编程 视频监控 设计模式 远程调试 配置文件 齐塔莉
Recent Comments
  • qg on Istio中的透明代理问题
  • heao on 基于本地gRPC的Go插件系统
  • 黄豆豆 on Ginkgo学习笔记
  • cloud on OpenStack学习笔记
  • 5dragoncon on Cilium学习笔记
  • Archeb on 重温iptables
  • C/C++编程:WebSocketpp(Linux + Clion + boostAsio) – 源码巴士 on 基于C/C++的WebSocket库
  • jerbin on eBPF学习笔记
  • point on Istio中的透明代理问题
  • G on Istio中的透明代理问题
  • 绿色记忆:Go语言单元测试和仿冒 on Ginkgo学习笔记
  • point on Istio中的透明代理问题
  • 【Maven】maven插件开发实战 – IT汇 on Maven插件开发
  • chenlx on eBPF学习笔记
  • Alex on eBPF学习笔记
  • CFC4N on eBPF学习笔记
  • 李运田 on 念爷爷
  • yongman on 记录一次KeyDB缓慢的定位过程
  • Alex on Istio中的透明代理问题
  • will on Istio中的透明代理问题
  • will on Istio中的透明代理问题
  • haolipeng on 基于本地gRPC的Go插件系统
  • 吴杰 on 基于C/C++的WebSocket库
©2005-2025 Gmem.cc | Powered by WordPress | 京ICP备18007345号-2