blob: 1e692d3f15065b37f782868a7489c3b6812998c0 [file] [log] [blame] [view]
Gabriel Charette14575f8952017-08-15 00:52:481# Using Sublime Text as your IDE
sashab4fe2e1d42016-05-27 01:17:452
3Sublime Text is a fast, powerful and easily extensible code editor. Check out
4some [visual demos](http://www.sublimetext.com) for a quick demonstration.
5
6You can download and install Sublime Text 3 from the [Sublime Text
7Website](http://www.sublimetext.com/3). Assuming you have access to the right
8repositories, you can also install Sublime via apt-get on Linux. Help and
9general documentation is available in the [Sublime Text 3
10Docs](http://www.sublimetext.com/docs/3/).
11
12Sublime can be used on Linux, Windows and Mac as an IDE for developing Chromium.
13Here's what works:
14
15* Editing code works well (especially if you're used to it and get used to the
16 shortcuts).
17* Navigating around the code works well. There are multiple ways to do this (a
brandtr492aca852016-08-08 10:42:3918 full list of keyboard shortcuts is available for [Windows/Linux](http://docs.sublimetext.info/en/latest/reference/keyboard_shortcuts_win.html)
19 and [Mac](http://docs.sublimetext.info/en/latest/reference/keyboard_shortcuts_osx.html)).
sashab4fe2e1d42016-05-27 01:17:4520* Building works fairly well and it does a decent job of parsing errors so
21 that you can click and jump to the problem spot.
22
23[TOC]
24
25## Setup
26
27### Configuring Sublime
28
29All global configuration for Sublime (including installed packages) is stored in
30`~/.config/sublime-text-3` (or `%APPDATA\Sublime Text 3` on Windows, or
31`~/Library/Application Support/Sublime Text 3` on Mac). We will reference the
32Linux folder for the rest of this tutorial, but replace with your own path if
33using a different OS. If you ever want a clean install, just remove this folder.
34
35**Warning**: If you have installed a license key for a paid version Sublime
36Text, removing this folder will delete the license key, too.
37
38Most of the packages you will install will be placed in `~/.config/sublime-
39text-3/Packages/User`, where Sublime Text can detect them. You can also get to
40this folder by selecting `Preferences > Browse Packages...` (or `Sublime Text >
41Preferences > Browse Packages...` on Mac).
42
43### A short word about paths
44
45Certain packages require executables to be on your `PATH`, but Sublime gets the
46`$PATH` variable from a login shell, not an interactive session (i.e. your path
47needs to be set in `~/.bash_profile`, `~/.zprofile`, etc, not `~/.bashrc`,
48`~/.zshrc`, etc). For more info, see
49[Debugging Path Problems](http://sublimelinter.readthedocs.io/en/latest/troubleshooting.html#debugging-path-problems).
50
51### Editing Preferences
52
53Sublime configuration (including project files, key bindings, etc) is done via
54JSON files. All configurations have a Default config (usually provided with the
55program or package to document the available commands) and a User config
56(overrides the default; this is where your overrides go). For example, select
57`Preferences > Settings - Default` to see all the available settings for
58Sublime. You can override any of these in `Preferences > Settings - User`.
59
60Here are some settings that help match the Chromium style guide:
61```
62{
63 // Basic Chromium style preferences
64 "rulers": [80],
65 "tab_size": 2,
66 "trim_trailing_white_space_on_save": true,
67 "ensure_newline_at_eof_on_save": true,
68 "translate_tabs_to_spaces" : true,
69
70 // Optional, but also useful, preferences
71 "always_show_minimap_viewport": true,
72 "bold_folder_labels": true,
73 "draw_white_space": "all",
74 "enable_tab_scrolling": false,
75 "highlight_line": true,
cbiesinger86215cb2016-08-09 23:54:2276
77 // Mainly for Windows, but harmless on Mac/Linux
78 "default_line_ending": "unix",
sashab4fe2e1d42016-05-27 01:17:4579}
80```
81
82The settings will take effect as soon as you save the file.
83
84#### Tips
85* `View > Side Bar > Show Open Files` will add a list of open files to the top
86 of the sidebar
87* ``Ctrl+` `` will show the console; it shows errors and debugging output, and
88 you can run Python
89* `View > Distractio-Free Mode` goes into fullscreen and removes Sublime's
90 header and footer
91* `View > Layout > ...` changes the configuration of files you can open side-
92 by-side
93* `Ctrl + P` (`Cmd + P` on Mac) quickly opens a search box to find a file or
94 definition
95* `Alt + O` (`Alt + Cmd + Up` on Mac) switches between the source/header file
96* `Alt + PageUp`/`Alt + PageDown` (`Alt + Cmd + Left`/`Alt + Cmd + Right` on
97 Mac) moves between tabs
98* `F12` (`Alt + Cmd + Down` on Mac) goes to the symbol's definition
qyearsleyc0dc6f42016-12-02 22:13:3999* With text selected, `Ctrl + D` will multi-select the next occurrence (so
sashab4fe2e1d42016-05-27 01:17:45100 typing in one types in all of them), and `Ctrl+U` deselects
101* Similarly, after finding something with `Ctrl + F`, `Alt + Enter` will
qyearsleyc0dc6f42016-12-02 22:13:39102 select all occurrences of the search query, which can be multi-edited
sashab4fe2e1d42016-05-27 01:17:45103* `Ctrl + X` without anything selected cuts the current line, then move to a
104 different line and `Ctrl + V` pastes it below the current line
105
106### Setting Sublime as the default Terminal editor
107
108Add `export EDITOR="subl -w"` to your `~/.bashrc` file (or similar) to open git
109commit messages, gn args, etc with Sublime Text. Since you may want to only open
110sublime when using a non-SSH session, you can wrap it in the following:
111
112```
113if [ "$SSH_CONNECTION" ]; then
114 export EDITOR='vim'
115else
116 export EDITOR='subl -w'
117fi
118```
119
120### Installing the Package Manager
121
122The Sublime Package Manager is the way most Sublime packages are installed and
123configured. You can install the package manager by following in the
124[installation instructions](https://packagecontrol.io/installation) on their
125website. Once the package manager is installed, restart Sublime.
126
127To install a package, press `Ctrl + Shift + P` and select `Package Manager:
128Install Package` (the string match is fairly leniant; you can just type
129`"instp"` and it should find it). Then type or select the package you want to
130install.
131
132#### Mac Paths Fix
133
134There is a known bug on Mac where Sublime doesn't detect the current path
135correctly. If you're using Mac, install the package `SublimeFixMacPath` to find
136the path from your `~/.bashrc` file or similar.
137
138## Making a New Project
139
140Once you have a copy of the Chromium checkout, we'll make a new Sublime project
141with the src directory as the root.
142
143To do this, create a new file `chromium.sublime-project` (or whatever name you'd
144like) in the folder above your `src/` directory, with the following contents
145(the exclude patterns are needed - Sublime can't handle indexing all of Chrome's
146files):
147
148```json
149{
150 "folders": [
151 {
152 "name": "chromium",
153 "path": "src",
154 "file_exclude_patterns":
155 [
156 "*.vcproj",
157 "*.vcxproj",
158 "*.sln",
159 "*.gitignore",
160 "*.gitmodules",
161 "*.vcxproj.*",
162 ],
163 "folder_exclude_patterns":
164 [
165 "build",
166 "out",
167 "third_party",
168 ".git",
169 ],
170 },
171 {
172 "name": "Generated Files",
173 "path": "src/out/Debug/gen",
174 },
175 ],
176}
177```
178
179If you are working on Blink, or any other third-party subproject, you can add it
180as a separate entry in the `folders` array:
181
182```json
183{
184 "name": "blink",
185 "path": "src/third_party/WebKit",
186}
187```
188
189Once you've saved the file, select `Project > Switch Project` and navigate to
190the `chromium.sublime-project` file.
191
192### Code Linting with CPPLint (Chromium only)
193
194**Note:** CPPLint enforces the Google/Chromium style guide, and hence is not
195useful on third_party projects that use another style.
196
1971. Install the SublimeLinter package (`Ctrl + Shift + P > Install Package >
198 SublimeLinter`).
1991. `cpplint` should be somewhere on your path so that SublimeLinter finds it.
200 depot_tools includes `cpplint.py`, but it needs to be named `cpplint`, so on
201 Linux and Mac you have to make a symlink to it:
202
203 ```shell
204 cd /path/to/depot_tools
205 ln -s cpplint.py cpplint
206 chmod a+x cpplint
207 ```
208
2091. Install the SublimeLinter-cpplint package (`Ctrl + Shift + P > Install
210 Package > SublimeLinter-cpplint`).
211
212Now when you save a C++ file, red dots should appear next to lines that
213invalidate the style. You can change this behavior with Choose Lint Mode (`Ctrl
214+ Shift + P > "lint mode"`).
215
216You can also see and navigate all the linter errors with Show All Errors (`Ctrl
217+ Shift + P > "show all"`). You can also use Next Error/Previous Error (and
218their associated shortcuts) to navigate the errors. The gutter at the bottom of
219the screen shows the message for the error on the current line.
220
221You can also change the style of dot next to the line with Choose Gutter Theme
222(`Ctrl + Shift + P > "gutter"`)
223
224For a list of all preferences, see `Preferences > Package Settings >
225SublimeLinter > Settings - Default` (or `Settings - User` to edit your
226preferences).
227
228### Format Selection with Clang-Format (Chromium only)
229
230**Note:** Like CPPLint, Clang-format enforces the Google/Chromium style guide,
231and hence is not useful on third_party projects that use another style.
232
2331. Inside `src/`, run:
234
235 ```shell
236 cd /path/to/chromium/src
237 cp buildtools/clang_format/script/clang-format-sublime.py ~/.config/sublime-text-3/Packages/User/
238 ```
239
2401. This installs a plugin that defines the command "clang\_format". You can add
241 the "clang\_format" command to `Preferences > Key Bindings - User`, e.g.:
242
243 ```json
244 [
245 { "keys": ["ctrl+shift+c"], "command": "clang_format" },
246 ]
247 ```
248
2492. Select some text and press `Ctrl + Shift + C` to format, or select no text to
250 format the entire file
251
jkarlin5999edb2017-02-22 13:02:35252## CodeSearch Integration with Chromium X-Refs
253
254With [Chromium X-Refs](https://github.com/karlinjf/ChromiumXRefs/) you can
jkarlin3b704582017-02-22 14:10:48255perform [https://cs.chromium.org](https://cs.chromium.org) cross-reference
jkarlin5999edb2017-02-22 13:02:35256searches in your editor. This gives you the call graph, overrides, references,
257declaration, and definition of most of the code. The results are as fresh as
258the search engine's index so uncomitted changes won't be reflected.
259
260More information on Chromium X-Ref's functionality (including keyboard and
261mouse shortcuts) can be found on the [Chromium X-Refs
262page](https://github.com/karlinjf/ChromiumXRefs/).
263
264
sashab4fe2e1d42016-05-27 01:17:45265## Code Completion with SublimeClang (Linux Only)
266
267SublimeClang is a powerful autocompletion plugin for Sublime that uses the Clang
268static analyzer to provide real-time type and function completion and
269compilation errors on save. It works with Chromium with a script that finds and
270parses the appropriate *.ninja files to find the necessary include paths for a
271given file.
272
273**Note**: Currently, only the Linux setup of SublimeClang is working. However,
274there are instructions below for Windows/Mac which you are welcome to try -- if
275you can get them to work, please update these instructions ^_^
276
277More information on SublimeClang's functionality (including keyboard shortcuts)
278can be found on the [SublimeClang GitHub
279page](https://github.com/quarnster/SublimeClang).
280
sashab4fe2e1d42016-05-27 01:17:45281### Linux
282
Josh Karlin4b0eeba2017-09-07 11:08:50283**Note** that there are recent (as of August 2017) changes to support C++14.
284Namely, you must use a more recent clang (3.9 is known to work), and use its
285resource directory instead of that supplied by SublimeClang.
286
2871. Install a recent libclang-dev to get a copy of libclang.so. 3.4 isn't
288 recent enough, but 3.9 works. If you use something different, change the
289 names and paths accordingly:
sashab4fe2e1d42016-05-27 01:17:45290
291 ```shell
Josh Karlin4b0eeba2017-09-07 11:08:50292 sudo apt-get install libclang-3.9-dev
sashab4fe2e1d42016-05-27 01:17:45293 ```
294
2951. Build libclang.so and SublimeClang in your packages directory:
296
297 ```shell
298 cd ~/.config/sublime-text-3/Packages
299 git clone --recursive https://github.com/quarnster/SublimeClang SublimeClang
300 cd SublimeClang
301 # Copy libclang.so to the internals dir
Josh Karlin4b0eeba2017-09-07 11:08:50302 cp /usr/lib/llvm-3.9/lib/libclang.so.1 internals/libclang.so
Ivan Sandrk6a7d891c2018-03-23 13:27:15303 # Fix src/main.cpp (shared_ptr -> std::shared_ptr)
304 sed -i -- 's/shared_ptr/std::shared_ptr/g' src/main.cpp
sashab4fe2e1d42016-05-27 01:17:45305 # Make the project - should be really quick, since libclang.so is already built
306 cd src && mkdir build && cd build
307 cmake ..
308 make
309 ```
310
3111. Edit your project file `Project > Edit Project` to call the script above
jkarlin51f4e512016-07-20 04:22:02312 (replace `/path/to/depot_tools` with your depot_tools directory):
sashab4fe2e1d42016-05-27 01:17:45313
Ted Meyer248eae302018-04-11 01:14:08314 ```json
sashab4fe2e1d42016-05-27 01:17:45315 {
316 "folders":
317 [
318 ...
319 ],
320 "settings":
321 {
322 "sublimeclang_options":
323 [
324 "-Wno-attributes",
Josh Karlin4b0eeba2017-09-07 11:08:50325 "-resource-dir=/usr/lib/llvm-3.9/lib/clang/3.9.1",
sashab4fe2e1d42016-05-27 01:17:45326 ],
jkarlin51f4e512016-07-20 04:22:02327 "sublimeclang_options_script": "python ${project_path}/src/tools/sublime/ninja_options_script.py -d '/path/to/depot_tools'",
sashab4fe2e1d42016-05-27 01:17:45328 }
329 }
330 ```
Josh Karlin4b0eeba2017-09-07 11:08:503311. Edit your SublimeClang settings and set `dont_prepend_clang_includes` to
332 true. This way you use the resource directory we set instead of the ancient
333 ones included in the repository. Without this you won't have C++14 support.
sashab4fe2e1d42016-05-27 01:17:45334
Ted Meyer248eae302018-04-11 01:14:083351. (Optional) To remove errors that sometimes show up from importing out of
336 third_party, edit your SublimeClang settings and set:
337
338 ```json
339 "diagnostic_ignore_dirs":
340 [
341 "${project_path}/src/third_party/"
342 ],
343 ```
344
sashab4fe2e1d42016-05-27 01:17:453451. Restart Sublime. Now when you save a file, you should see a "Reparsing…"
346 message in the footer and errors will show up in the output panel. Also,
347 variables and function definitions should auto-complete as you type.
348
349**Note:** If you're having issues, adding `"sublimeclang_debug_options": true` to
350your settings file will print more to the console (accessed with ``Ctrl + ` ``)
351which can be helpful when debugging.
352
Ted Meyer248eae302018-04-11 01:14:08353**Debugging:** If things don't seem to be working, the console ``Ctrl + ` `` is
354your friend. Here are some basic errors which have workarounds:
355
3561. Bad Libclang args
357 - *problem:* ```tu is None...``` is showing up repeatedly in the console:
358 - *solution:* ninja_options_script.py is generating arguments that libclang
359 can't parse properly. To fix this, make sure to
360 ```export CHROMIUM_OUT_DIR="{Default Out Directory}"```
361 This is because the ninja_options_script.py file will use the most recently
362 modified build directory unless specified to do otherwise. If the chosen
363 build directory has unusual args (say for thread sanitization), libclang may
364 fail.
365
366
sashab72658fc2016-05-27 05:57:05367### Mac (not working)
368
3691. Install cmake if you don't already have it
3701. Install XCode
3711. Copy libclang.dylib from XCode to the SublimeClang/internals folder:
372
373 ```shell
374 cd ~/Library/Application\ Support/Sublime\ Text\ 3/Packages
375 git clone --recursive https://github.com/quarnster/SublimeClang SublimeClang
376 cd SublimeClang
377 cp /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libclang.dylib internals/libclang.dylib
378 # Remove i386 from the build file since XCode's libclang.dylib is only a 64-bit version
379 sed -ie 's/CMAKE_OSX_ARCHITECTURES i386 x86_64/CMAKE_OSX_ARCHITECTURES x86_64/' src/CMakeLists.txt
380 # Copy libclang.dylib to the internals dir
381 # Make the project - should be really quick, since libclang.dylib is already built
382 cd src && mkdir build && cd build
383 cmake ..
384 make
385 ```
386
3871. The rest of the instructions are the same, but when adding your project
388 settings, add these extra arguments to `sublimeclang_options`:
389
390 ```json
391 "sublimeclang_options":
392 [
393 ...
394 // MAC-ONLY: Include these options, replacing the paths with the correct installed SDK
395 "-isystem", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/",
396 "-isystem", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1",
397 "-F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/",
398 "isysroot", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk",
399 "-mmacosx-version-min=10.7",
400 "-stdlib=libc++",
401 "-isystem", "/usr/include",
402 "-isystem", "/usr/include/c++/*",
403 ]
404 ```
405
406### Windows (not working)
407
408You'll need cl.exe which can be installed with [the Visual C++ Build Tools
4092015](https://blogs.msdn.microsoft.com/vcblog/2016/03/31/announcing-the-official-release-of-the-visual-c-build-tools-2015/).
410You should have cl.exe on your `$PATH`, which you can get by running `C:\Program
411Files (x86)\Microsoft Visual C++ Build Tools\Visual C++ 2015 x64 Native Build
412Tools Command Prompt`.
413
414Then you'll need a copy of libclang.so, which can be found on the [LLVM
415website](http://llvm.org/releases/download.html). The instructions should be the
416same as Linux from there.
417
sashab4fe2e1d42016-05-27 01:17:45418## Alternative: Code Completion with Ctags
419
420For a fast way to look up symbols, we recommend installing the CTags plugin.
421
4221. Install Exuberant Ctags and make sure that ctags is in your path:
423 http://ctags.sourceforge.net/ (on linux you should be able to just do `sudo
424 apt-get install ctags`)
4251. Install the Ctags plugin: `Ctrl + Shift + P > Install Package > Ctags`
426
427Once installed, you'll get an entry in the context menu when you right click the
428top level folder(s) in your project that allow you to build the Ctags database.
429If you're working in a Chrome project however, do not do that at this point,
430since it will index much more than you actually want. Instead, do one of:
431
4321. Create a batch file (e.g. ctags_builder.bat) that you can run either
433 manually or automatically after you do a gclient sync:
434
435 ```
436 ctags --languages=C++ --exclude=third_party --exclude=.git --exclude=build --exclude=out -R -f .tmp_tags & ctags --languages=C++ -a -R -f .tmp_tags third_party\platformsdk_win7 & move /Y .tmp_tags .tags
437 ```
438
439 This takes a couple of minutes to run, but you can work while it is indexing.
4401. Edit the `CTags.sublime-settings` file for the ctags plugin so that it runs
441 ctags with the above parameters. Note: the above is a batch file - don't
442 simply copy all of it verbatim and paste it into the CTags settings file)
443
444Once installed, you can quickly look up symbols with `Ctrl+t, Ctrl+t` etc. More
445information on keyboard shortcuts can be found on the [CTags GitHub
446page](https://github.com/SublimeText/CTags).
447
448One more hint - Edit your `.gitignore` file (under `%USERPROFILE%` or `~/`) so
449that git ignores the `.tags` file. You don't want to commit it. :)
450
451If you don't have a `.gitignore` in your profile directory, you can tell git
452about it with this command: Windows: `git config --global core.excludesfile
453%USERPROFILE%\.gitignore` Mac, Linux: `git config --global core.excludesfile
454~/.gitignore`
455
sashab4fe2e1d42016-05-27 01:17:45456## Building inside Sublime
457
458To build inside Sublime Text, we first have to create a new build system.
459
460You can add the build system to your project file (`Project > Edit Project`),
461replacing `out/Debug` with your output directory (on Windows, replace /'s with
462\s in `cmd` and `working_dir`):
463
464```json
465{
466 "folders": [
467 ...
468 ],
469 "build_systems":
470 [
471 {
472 "name": "Build Chrome",
473 "cmd": ["ninja", "-C", "out/Debug", "chrome"],
474 "working_dir": "${project_path}/src",
Gabriel Charette14575f8952017-08-15 00:52:48475 "file_regex": "^[.\\\\/]*([a-z]?:?[\\w.\\\\/]+)[(:]([0-9]+)[,:]?([0-9]+)?[)]?:(.*)$",
sashab4fe2e1d42016-05-27 01:17:45476 "variants": [],
477 },
478 ],
479}
480```
481
482The file regex will allow you to click on errors to go to the error line.
483
484If you're using goma, add the -j parameter (replace out/Debug with your out directory):
485```
486 "cmd": ["ninja", "-j", "1000", "-C", "out/Debug", "chrome"],
487```
488
Ivan Sandrkfe73ee82018-03-23 11:54:16489**Regex explanation:** Aims to capture these error formats while respecting
sashab4fe2e1d42016-05-27 01:17:45490[Sublime's perl-like group matching](http://docs.sublimetext.info/en/latest/reference/build_systems/configuration.html#build-capture-error-output):
491
4921. `d:\src\chrome\src\base\threading\sequenced_worker_pool.cc(670): error
493 C2653: 'Foo': is not a class or namespace name`
Gabriel Charette14575f8952017-08-15 00:52:484941. `../../base/threading/sequenced_worker_pool.cc(670,26) error: use of
495 undeclared identifier 'Foo'`
sashab4fe2e1d42016-05-27 01:17:454961. `../../base/threading/sequenced_worker_pool.cc:670:26: error: use of
497 undeclared identifier 'Foo'`
498
499```
Gabriel Charette14575f8952017-08-15 00:52:48500"file_regex": "^[.\\\\/]*([a-z]?:?[\\w.\\\\/]+)[(:]([0-9]+)[,:]?([0-9]+)?[)]?:(.*)$"
501 ( 0 ) ( 1 )( 2 ) (3 )( 4 )( 5 )( 6 )(7 ) (8 )
sashab4fe2e1d42016-05-27 01:17:45502
503(0) Cut relative paths (which typically are relative to the out dir and targeting src/ which is already the "working_dir")
504(1) Match a drive letter if any
505(2) Match the rest of the file
506(1)+(2) Capture the "filename group"
507(3) File name is followed by open bracket or colon before line number
508(4) Capture "line number group"
Gabriel Charette14575f8952017-08-15 00:52:48509(5) If (6) is non-empty there will be a comma or colon preceding it (but can't put it inside brackets as the "column number group" only wants digits).
510(6) Capture "column number group" if any
511(7) Closing bracket of either "(line)" or "(line,column)" if bracket syntax is in effect
sashab4fe2e1d42016-05-27 01:17:45512(8) Everything else until EOL is the error message.
513```
514
515### Building other targets
516
517You can add build variants to the `variants` array to have quick access to other
518build targets with `Ctrl + Shift + B`:
519
520```json
521"variants":
522 [
523 {
524 "name": "Unit Tests",
525 "cmd": ["ninja", "-j", "1000", "-C", "out/Debug", "unit_tests"],
526 },
527 {
528 "name": "Browser Tests",
529 "cmd": ["ninja", "-j", "1000", "-C", "out/Debug", "browser_tests"],
530 },
Sebastien Marchand07247322018-03-08 21:05:23531 {
532 "name": "Current file",
533 "cmd": ["compile_single_file", "--build-dir", "out/Debug", "--file-path", "$file"],
534 },
sashab4fe2e1d42016-05-27 01:17:45535 ]
536```
537
538You can also add a variant for running chrome, meaning you can assign a keyboard
539shortcut to run it after building:
540
541```json
542"variants":
543 [
544 ...
545 {
546 "cmd": ["out/Debug/chrome"],
547 "name": "run_chrome",
548 "shell": true,
549 "env": {
550 "CHROME_DEVEL_SANDBOX": "/usr/local/sbin/chrome-devel-sandbox",
551 },
552 },
553 ]
554```
555
556### Assigning builds to keyboard shortcuts
557
558To assign a build to a keyboard shortcut, select `Preferences > Key Bindings -
559User` (or `Key Bindings - Default` to see the current key bindings). You can add
560the build variants above with the `"build"` command, like so:
561
562```json
563[
564 ...
565 { "keys": ["ctrl+shift+u"], "command": "build", "args": {"variant": "unit_tests"} },
566 { "keys": ["ctrl+shift+b"], "command": "build", "args": {"variant": "browser_tests"} },
567 { "keys": ["ctrl+shift+x"], "command": "build", "args": {"variant": "run_chrome"} },
568]
569```
570
571For more info on custom key bindings, see the
572[Sublime Text Key Bindings Documentation](http://docs.sublimetext.info/en/latest/customization/key_bindings.html).
573
574## Other useful packages
575
576Some other useful packages that improve sublime can be installed from `Ctrl+Shift+P > Install Package`:
577
578* Git enhancements
579 * [Git](https://packagecontrol.io/packages/Git)
580 * [GitCommitMsg](https://packagecontrol.io/packages/GitCommitMsg) -
581 Performs a 'git blame' for one or more lines of code with `Alt + Shift +
582 M` (`Command + Shift + M` on Mac)
583 * [GitDiffHelper](https://packagecontrol.io/packages/GitDiffHelper) -
584 `Ctrl + Alt + G` to open all files modified since the last commit
585 * [GitOpenChangedFiles](https://packagecontrol.io/packages/GitOpenChangedFiles) -
586 `Ctrl + Shift + O` (`Command + Shift + O` on Mac) to open all files
587 modified on the current branch
588 * [Git Conflict
589 Resolver](https://packagecontrol.io/packages/Git%20Conflict%20Resolver)
590 - A GUI for resolving git conflicts
591 * [GitGutter](https://packagecontrol.io/packages/GitGutter) - Shows an
592 icon next to lines that have been inserted, modified or deleted since
593 the last commit.
594* Visual enhancements
595 * [SyncedSideBar](https://packagecontrol.io/packages/SyncedSideBar) -
596 Syncs the currently open file with the expanded tree in the sidebar
597 * [SideBarEnhancements](https://packagecontrol.io/packages/SideBarEnhancements) -
598 Adds more file management options to the sidebar context menu.
599 * [SyncedSidebarBg](https://packagecontrol.io/packages/SyncedSidebarBg) -
600 A purely aesthetic improvement that syncs the sidebar background with
601 the background color for the current theme.
602 * [Theme - Soda](http://buymeasoda.github.io/soda-theme/) - A global theme
603 for Sublime that matches the default color scheme. Needs `"theme": "Soda
604 Light 3.sublime-theme"` in your Preferences > Settings - User` file.
605* Code navigation tools
606 * [AutoFileName](https://packagecontrol.io/packages/AutoFileName) - Auto-
607 completes filenames in #includes
pastarmovj7e3be85f2016-06-07 17:53:58608 * [Open-Include](https://packagecontrol.io/packagenavigations/Open-Include)
609 - Opens the file path under the cursor with `Alt + D`
sashab4fe2e1d42016-05-27 01:17:45610* Text tools
611 * [Case Conversion](https://packagecontrol.io/packages/Case%20Conversion) -
612 automatically changes the case of selected text, e.g. `kConstantName` to
613 `CONSTANT_NAME`
614 * [Text Pastry](https://packagecontrol.io/packages/Text%20Pastry) -
615 Inserts incremental number sequences with multi-select
616 * [Wrap Plus](https://packagecontrol.io/packages/Wrap%20Plus) - Auto-wraps
617 a comment block to 80 columns with `Alt + Q` (was used to write this
618 document! ;-)
619 * [Diffy](https://packagecontrol.io/packages/Diffy) - With two files
620 opened side-by-side, `Ctrl + k Ctrl + d` will show the differences