| Index: docs/linux_sublime_dev.md
|
| diff --git a/docs/linux_sublime_dev.md b/docs/linux_sublime_dev.md
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..97b9bfcbf8f8b6a8703a60d36fff4d2127aeb588
|
| --- /dev/null
|
| +++ b/docs/linux_sublime_dev.md
|
| @@ -0,0 +1,581 @@
|
| +# Linux Sublime Dev
|
| +
|
| +Sublime Text is a fast, powerful and easily extensible code editor. Check out
|
| +some [visual demos](http://www.sublimetext.com) for a quick demonstration.
|
| +
|
| +You can download and install Sublime Text 3 from the [Sublime Text
|
| +Website](http://www.sublimetext.com/3). Assuming you have access to the right
|
| +repositories, you can also install Sublime via apt-get on Linux. Help and
|
| +general documentation is available in the [Sublime Text 3
|
| +Docs](http://www.sublimetext.com/docs/3/).
|
| +
|
| +Sublime can be used on Linux, Windows and Mac as an IDE for developing Chromium.
|
| +Here's what works:
|
| +
|
| +* Editing code works well (especially if you're used to it and get used to the
|
| + shortcuts).
|
| +* Navigating around the code works well. There are multiple ways to do this (a
|
| + full list of keyboard shortcuts is available for [Windows/Linux](http://docs
|
| + .sublimetext.info/en/latest/reference/keyboard_shortcuts_win.html) and
|
| + [Mac](http://docs.sublimetext.info/en/latest/reference/keyboard_shortcuts_osx.html)).
|
| +* Building works fairly well and it does a decent job of parsing errors so
|
| + that you can click and jump to the problem spot.
|
| +
|
| +[TOC]
|
| +
|
| +## Setup
|
| +
|
| +### Configuring Sublime
|
| +
|
| +All global configuration for Sublime (including installed packages) is stored in
|
| +`~/.config/sublime-text-3` (or `%APPDATA\Sublime Text 3` on Windows, or
|
| +`~/Library/Application Support/Sublime Text 3` on Mac). We will reference the
|
| +Linux folder for the rest of this tutorial, but replace with your own path if
|
| +using a different OS. If you ever want a clean install, just remove this folder.
|
| +
|
| +**Warning**: If you have installed a license key for a paid version Sublime
|
| +Text, removing this folder will delete the license key, too.
|
| +
|
| +Most of the packages you will install will be placed in `~/.config/sublime-
|
| +text-3/Packages/User`, where Sublime Text can detect them. You can also get to
|
| +this folder by selecting `Preferences > Browse Packages...` (or `Sublime Text >
|
| +Preferences > Browse Packages...` on Mac).
|
| +
|
| +### A short word about paths
|
| +
|
| +Certain packages require executables to be on your `PATH`, but Sublime gets the
|
| +`$PATH` variable from a login shell, not an interactive session (i.e. your path
|
| +needs to be set in `~/.bash_profile`, `~/.zprofile`, etc, not `~/.bashrc`,
|
| +`~/.zshrc`, etc). For more info, see
|
| +[Debugging Path Problems](http://sublimelinter.readthedocs.io/en/latest/troubleshooting.html#debugging-path-problems).
|
| +
|
| +### Editing Preferences
|
| +
|
| +Sublime configuration (including project files, key bindings, etc) is done via
|
| +JSON files. All configurations have a Default config (usually provided with the
|
| +program or package to document the available commands) and a User config
|
| +(overrides the default; this is where your overrides go). For example, select
|
| +`Preferences > Settings - Default` to see all the available settings for
|
| +Sublime. You can override any of these in `Preferences > Settings - User`.
|
| +
|
| +Here are some settings that help match the Chromium style guide:
|
| +```
|
| +{
|
| + // Basic Chromium style preferences
|
| + "rulers": [80],
|
| + "tab_size": 2,
|
| + "trim_trailing_white_space_on_save": true,
|
| + "ensure_newline_at_eof_on_save": true,
|
| + "translate_tabs_to_spaces" : true,
|
| +
|
| + // Optional, but also useful, preferences
|
| + "always_show_minimap_viewport": true,
|
| + "bold_folder_labels": true,
|
| + "draw_white_space": "all",
|
| + "enable_tab_scrolling": false,
|
| + "highlight_line": true,
|
| +}
|
| +```
|
| +
|
| +The settings will take effect as soon as you save the file.
|
| +
|
| +#### Tips
|
| +* `View > Side Bar > Show Open Files` will add a list of open files to the top
|
| + of the sidebar
|
| +* ``Ctrl+` `` will show the console; it shows errors and debugging output, and
|
| + you can run Python
|
| +* `View > Distractio-Free Mode` goes into fullscreen and removes Sublime's
|
| + header and footer
|
| +* `View > Layout > ...` changes the configuration of files you can open side-
|
| + by-side
|
| +* `Ctrl + P` (`Cmd + P` on Mac) quickly opens a search box to find a file or
|
| + definition
|
| +* `Alt + O` (`Alt + Cmd + Up` on Mac) switches between the source/header file
|
| +* `Alt + PageUp`/`Alt + PageDown` (`Alt + Cmd + Left`/`Alt + Cmd + Right` on
|
| + Mac) moves between tabs
|
| +* `F12` (`Alt + Cmd + Down` on Mac) goes to the symbol's definition
|
| +* With text selected, `Ctrl + D` will multi-select the next occurrance (so
|
| + typing in one types in all of them), and `Ctrl+U` deselects
|
| +* Similarly, after finding something with `Ctrl + F`, `Alt + Enter` will
|
| + select all occurrances of the search query, which can be multi-edited
|
| +* `Ctrl + X` without anything selected cuts the current line, then move to a
|
| + different line and `Ctrl + V` pastes it below the current line
|
| +
|
| +### Setting Sublime as the default Terminal editor
|
| +
|
| +Add `export EDITOR="subl -w"` to your `~/.bashrc` file (or similar) to open git
|
| +commit messages, gn args, etc with Sublime Text. Since you may want to only open
|
| +sublime when using a non-SSH session, you can wrap it in the following:
|
| +
|
| +```
|
| +if [ "$SSH_CONNECTION" ]; then
|
| + export EDITOR='vim'
|
| +else
|
| + export EDITOR='subl -w'
|
| +fi
|
| +```
|
| +
|
| +### Installing the Package Manager
|
| +
|
| +The Sublime Package Manager is the way most Sublime packages are installed and
|
| +configured. You can install the package manager by following in the
|
| +[installation instructions](https://packagecontrol.io/installation) on their
|
| +website. Once the package manager is installed, restart Sublime.
|
| +
|
| +To install a package, press `Ctrl + Shift + P` and select `Package Manager:
|
| +Install Package` (the string match is fairly leniant; you can just type
|
| +`"instp"` and it should find it). Then type or select the package you want to
|
| +install.
|
| +
|
| +#### Mac Paths Fix
|
| +
|
| +There is a known bug on Mac where Sublime doesn't detect the current path
|
| +correctly. If you're using Mac, install the package `SublimeFixMacPath` to find
|
| +the path from your `~/.bashrc` file or similar.
|
| +
|
| +## Making a New Project
|
| +
|
| +Once you have a copy of the Chromium checkout, we'll make a new Sublime project
|
| +with the src directory as the root.
|
| +
|
| +To do this, create a new file `chromium.sublime-project` (or whatever name you'd
|
| +like) in the folder above your `src/` directory, with the following contents
|
| +(the exclude patterns are needed - Sublime can't handle indexing all of Chrome's
|
| +files):
|
| +
|
| +```json
|
| +{
|
| + "folders": [
|
| + {
|
| + "name": "chromium",
|
| + "path": "src",
|
| + "file_exclude_patterns":
|
| + [
|
| + "*.vcproj",
|
| + "*.vcxproj",
|
| + "*.sln",
|
| + "*.gitignore",
|
| + "*.gitmodules",
|
| + "*.vcxproj.*",
|
| + ],
|
| + "folder_exclude_patterns":
|
| + [
|
| + "build",
|
| + "out",
|
| + "third_party",
|
| + ".git",
|
| + ],
|
| + },
|
| + {
|
| + "name": "Generated Files",
|
| + "path": "src/out/Debug/gen",
|
| + },
|
| + ],
|
| +}
|
| +```
|
| +
|
| +If you are working on Blink, or any other third-party subproject, you can add it
|
| +as a separate entry in the `folders` array:
|
| +
|
| +```json
|
| +{
|
| + "name": "blink",
|
| + "path": "src/third_party/WebKit",
|
| +}
|
| +```
|
| +
|
| +Once you've saved the file, select `Project > Switch Project` and navigate to
|
| +the `chromium.sublime-project` file.
|
| +
|
| +### Code Linting with CPPLint (Chromium only)
|
| +
|
| +**Note:** CPPLint enforces the Google/Chromium style guide, and hence is not
|
| +useful on third_party projects that use another style.
|
| +
|
| +1. Install the SublimeLinter package (`Ctrl + Shift + P > Install Package >
|
| + SublimeLinter`).
|
| +1. `cpplint` should be somewhere on your path so that SublimeLinter finds it.
|
| + depot_tools includes `cpplint.py`, but it needs to be named `cpplint`, so on
|
| + Linux and Mac you have to make a symlink to it:
|
| +
|
| + ```shell
|
| + cd /path/to/depot_tools
|
| + ln -s cpplint.py cpplint
|
| + chmod a+x cpplint
|
| + ```
|
| +
|
| +1. Install the SublimeLinter-cpplint package (`Ctrl + Shift + P > Install
|
| + Package > SublimeLinter-cpplint`).
|
| +
|
| +Now when you save a C++ file, red dots should appear next to lines that
|
| +invalidate the style. You can change this behavior with Choose Lint Mode (`Ctrl
|
| ++ Shift + P > "lint mode"`).
|
| +
|
| +You can also see and navigate all the linter errors with Show All Errors (`Ctrl
|
| ++ Shift + P > "show all"`). You can also use Next Error/Previous Error (and
|
| +their associated shortcuts) to navigate the errors. The gutter at the bottom of
|
| +the screen shows the message for the error on the current line.
|
| +
|
| +You can also change the style of dot next to the line with Choose Gutter Theme
|
| +(`Ctrl + Shift + P > "gutter"`)
|
| +
|
| +For a list of all preferences, see `Preferences > Package Settings >
|
| +SublimeLinter > Settings - Default` (or `Settings - User` to edit your
|
| +preferences).
|
| +
|
| +### Format Selection with Clang-Format (Chromium only)
|
| +
|
| +**Note:** Like CPPLint, Clang-format enforces the Google/Chromium style guide,
|
| +and hence is not useful on third_party projects that use another style.
|
| +
|
| +1. Inside `src/`, run:
|
| +
|
| + ```shell
|
| + cd /path/to/chromium/src
|
| + cp buildtools/clang_format/script/clang-format-sublime.py ~/.config/sublime-text-3/Packages/User/
|
| + ```
|
| +
|
| +1. This installs a plugin that defines the command "clang\_format". You can add
|
| + the "clang\_format" command to `Preferences > Key Bindings - User`, e.g.:
|
| +
|
| + ```json
|
| + [
|
| + { "keys": ["ctrl+shift+c"], "command": "clang_format" },
|
| + ]
|
| + ```
|
| +
|
| +2. Select some text and press `Ctrl + Shift + C` to format, or select no text to
|
| + format the entire file
|
| +
|
| +## Code Completion with SublimeClang (Linux Only)
|
| +
|
| +SublimeClang is a powerful autocompletion plugin for Sublime that uses the Clang
|
| +static analyzer to provide real-time type and function completion and
|
| +compilation errors on save. It works with Chromium with a script that finds and
|
| +parses the appropriate *.ninja files to find the necessary include paths for a
|
| +given file.
|
| +
|
| +**Note**: Currently, only the Linux setup of SublimeClang is working. However,
|
| +there are instructions below for Windows/Mac which you are welcome to try -- if
|
| +you can get them to work, please update these instructions ^_^
|
| +
|
| +More information on SublimeClang's functionality (including keyboard shortcuts)
|
| +can be found on the [SublimeClang GitHub
|
| +page](https://github.com/quarnster/SublimeClang).
|
| +
|
| +### Mac (not working)
|
| +
|
| +1. Install cmake if you don't already have it
|
| +1. Install XCode
|
| +1. Copy libclang.dylib from XCode to the SublimeClang/internals folder:
|
| +
|
| + ```shell
|
| + cd ~/Library/Application\ Support/Sublime\ Text\ 3/Packages
|
| + git clone --recursive https://github.com/quarnster/SublimeClang SublimeClang
|
| + cd SublimeClang
|
| + cp /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libclang.dylib internals/libclang.dylib
|
| + # Remove i386 from the build file since XCode's libclang.dylib is only a 64-bit version
|
| + sed -ie 's/CMAKE_OSX_ARCHITECTURES i386 x86_64/CMAKE_OSX_ARCHITECTURES x86_64/' src/CMakeLists.txt
|
| + # Copy libclang.dylib to the internals dir
|
| + # Make the project - should be really quick, since libclang.dylib is already built
|
| + cd src && mkdir build && cd build
|
| + cmake ..
|
| + make
|
| + ```
|
| +
|
| +1. The rest of the instructions are the same, but when adding your project
|
| + settings, add these extra arguments to `sublimeclang_options`:
|
| +
|
| + ```json
|
| + "sublimeclang_options":
|
| + [
|
| + ...
|
| + // MAC-ONLY: Include these options, replacing the paths with the correct installed SDK
|
| + "-isystem", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/",
|
| + "-isystem", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/c++/4.2.1",
|
| + "-F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/",
|
| + "isysroot", "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk",
|
| + "-mmacosx-version-min=10.7",
|
| + "-stdlib=libc++",
|
| + "-isystem", "/usr/include",
|
| + "-isystem", "/usr/include/c++/*",
|
| + ]
|
| + ```
|
| +
|
| +### Windows (not working)
|
| +
|
| +You'll need cl.exe which can be installed with [the Visual C++ Build Tools
|
| +2015](https://blogs.msdn.microsoft.com/vcblog/2016/03/31/announcing-the-official-release-of-the-visual-c-build-tools-2015/).
|
| +You should have cl.exe on your `$PATH`, which you can get by running `C:\Program
|
| +Files (x86)\Microsoft Visual C++ Build Tools\Visual C++ 2015 x64 Native Build
|
| +Tools Command Prompt`.
|
| +
|
| +Then you'll need a copy of libclang.so, which can be found on the [LLVM
|
| +website](http://llvm.org/releases/download.html). The instructions should be the
|
| +same as Linux from there.
|
| +
|
| +### Linux
|
| +
|
| +1. Install libclang-dev to get a copy of libclang.so:
|
| +
|
| + ```shell
|
| + sudo apt-get install libclang-dev
|
| + ```
|
| +
|
| +1. Build libclang.so and SublimeClang in your packages directory:
|
| +
|
| + ```shell
|
| + cd ~/.config/sublime-text-3/Packages
|
| + git clone --recursive https://github.com/quarnster/SublimeClang SublimeClang
|
| + cd SublimeClang
|
| + # Copy libclang.so to the internals dir
|
| + cp $(ldconfig -p | grep libclang.so | cut -d" " -f4) internals/libclang.so
|
| + # Make the project - should be really quick, since libclang.so is already built
|
| + cd src && mkdir build && cd build
|
| + cmake ..
|
| + make
|
| + ```
|
| +
|
| +1. Edit your project file `Project > Edit Project` to call the script above
|
| + (replace `out/Debug` with your out directory):
|
| +
|
| + ```
|
| + {
|
| + "folders":
|
| + [
|
| + ...
|
| + ],
|
| + "settings":
|
| + {
|
| + "sublimeclang_options":
|
| + [
|
| + "-Wno-attributes",
|
| + ],
|
| + "sublimeclang_options_script": "python ${project_path}/src/docs/scripts/ninja_options_script.py ${project_path}/src ${project_path}/src/out/Debug",
|
| + }
|
| + }
|
| + ```
|
| +
|
| +1. Restart Sublime. Now when you save a file, you should see a "Reparsing…"
|
| + message in the footer and errors will show up in the output panel. Also,
|
| + variables and function definitions should auto-complete as you type.
|
| +
|
| +**Note:** If you're having issues, adding `"sublimeclang_debug_options": true` to
|
| +your settings file will print more to the console (accessed with ``Ctrl + ` ``)
|
| +which can be helpful when debugging.
|
| +
|
| +## Alternative: Code Completion with Ctags
|
| +
|
| +For a fast way to look up symbols, we recommend installing the CTags plugin.
|
| +
|
| +1. Install Exuberant Ctags and make sure that ctags is in your path:
|
| + http://ctags.sourceforge.net/ (on linux you should be able to just do `sudo
|
| + apt-get install ctags`)
|
| +1. Install the Ctags plugin: `Ctrl + Shift + P > Install Package > Ctags`
|
| +
|
| +Once installed, you'll get an entry in the context menu when you right click the
|
| +top level folder(s) in your project that allow you to build the Ctags database.
|
| +If you're working in a Chrome project however, do not do that at this point,
|
| +since it will index much more than you actually want. Instead, do one of:
|
| +
|
| +1. Create a batch file (e.g. ctags_builder.bat) that you can run either
|
| + manually or automatically after you do a gclient sync:
|
| +
|
| + ```
|
| + 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
|
| + ```
|
| +
|
| + This takes a couple of minutes to run, but you can work while it is indexing.
|
| +1. Edit the `CTags.sublime-settings` file for the ctags plugin so that it runs
|
| + ctags with the above parameters. Note: the above is a batch file - don't
|
| + simply copy all of it verbatim and paste it into the CTags settings file)
|
| +
|
| +Once installed, you can quickly look up symbols with `Ctrl+t, Ctrl+t` etc. More
|
| +information on keyboard shortcuts can be found on the [CTags GitHub
|
| +page](https://github.com/SublimeText/CTags).
|
| +
|
| +One more hint - Edit your `.gitignore` file (under `%USERPROFILE%` or `~/`) so
|
| +that git ignores the `.tags` file. You don't want to commit it. :)
|
| +
|
| +If you don't have a `.gitignore` in your profile directory, you can tell git
|
| +about it with this command: Windows: `git config --global core.excludesfile
|
| +%USERPROFILE%\.gitignore` Mac, Linux: `git config --global core.excludesfile
|
| +~/.gitignore`
|
| +
|
| +### Build a single file
|
| +Copy the file `compile_current_file.py` to your Packages directory:
|
| +
|
| +```shell
|
| +cd /path/to/chromium/src
|
| +cp docs/scripts/compile_current_file.py ~/.config/sublime-text-3/Packages/Usr
|
| +```
|
| +
|
| +This will give you access to a command `"compile_current_file"`, which you can
|
| +then add to your `Preferences > Keybindings - User` file:
|
| +
|
| +```json
|
| +[
|
| + { "keys": ["ctrl+f7"], "command": "compile_current_file", "args": {"target_build": "Debug"} },
|
| + { "keys": ["ctrl+shift+f7"], "command": "compile_current_file", "args": {"target_build": "Release"} },
|
| +]
|
| +```
|
| +
|
| +You can then press those key combinations to compile the current file in the
|
| +given target build.
|
| +
|
| +## Building inside Sublime
|
| +
|
| +To build inside Sublime Text, we first have to create a new build system.
|
| +
|
| +You can add the build system to your project file (`Project > Edit Project`),
|
| +replacing `out/Debug` with your output directory (on Windows, replace /'s with
|
| +\s in `cmd` and `working_dir`):
|
| +
|
| +```json
|
| +{
|
| + "folders": [
|
| + ...
|
| + ],
|
| + "build_systems":
|
| + [
|
| + {
|
| + "name": "Build Chrome",
|
| + "cmd": ["ninja", "-C", "out/Debug", "chrome"],
|
| + "working_dir": "${project_path}/src",
|
| + "file_regex": "^[.\\\\/]*([a-z]?:?[\\w.\\\\/]+)[(:]([0-9]+)[):]([0-9]+)?:?(.*)$",
|
| + "variants": [],
|
| + },
|
| + ],
|
| +}
|
| +```
|
| +
|
| +The file regex will allow you to click on errors to go to the error line.
|
| +
|
| +If you're using goma, add the -j parameter (replace out/Debug with your out directory):
|
| +```
|
| + "cmd": ["ninja", "-j", "1000", "-C", "out/Debug", "chrome"],
|
| +```
|
| +
|
| +**Regex explanation:** Aims to capture these two error formats while respecting
|
| +[Sublime's perl-like group matching](http://docs.sublimetext.info/en/latest/reference/build_systems/configuration.html#build-capture-error-output):
|
| +
|
| +1. `d:\src\chrome\src\base\threading\sequenced_worker_pool.cc(670): error
|
| + C2653: 'Foo': is not a class or namespace name`
|
| +1. `../../base/threading/sequenced_worker_pool.cc:670:26: error: use of
|
| + undeclared identifier 'Foo'`
|
| +
|
| +```
|
| +"file_regex": "^[.\\\\/]*([a-z]?:?[\\w.\\\\/]+)[(:]([0-9]+)[):]([0-9]+)?:?(.*)$"
|
| + ( 0 ) ( 1 )( 2 ) (3 ) ( 4 ) ( 5 ) ( 6 )(7)(8 )
|
| +
|
| +(0) Cut relative paths (which typically are relative to the out dir and targeting src/ which is already the "working_dir")
|
| +(1) Match a drive letter if any
|
| +(2) Match the rest of the file
|
| +(1)+(2) Capture the "filename group"
|
| +(3) File name is followed by open bracket or colon before line number
|
| +(4) Capture "line number group"
|
| +(5) Line # is either followed by close bracket or another colon
|
| +(6) Capture "column filename group" if any.
|
| +(7) If (6) is non-empty there will be another colon (but can't put it inside brackets as the "column filename group" only wants digits).
|
| +(8) Everything else until EOL is the error message.
|
| +```
|
| +
|
| +### Building other targets
|
| +
|
| +You can add build variants to the `variants` array to have quick access to other
|
| +build targets with `Ctrl + Shift + B`:
|
| +
|
| +```json
|
| +"variants":
|
| + [
|
| + {
|
| + "name": "Unit Tests",
|
| + "cmd": ["ninja", "-j", "1000", "-C", "out/Debug", "unit_tests"],
|
| + },
|
| + {
|
| + "name": "Browser Tests",
|
| + "cmd": ["ninja", "-j", "1000", "-C", "out/Debug", "browser_tests"],
|
| + },
|
| + ]
|
| +```
|
| +
|
| +You can also add a variant for running chrome, meaning you can assign a keyboard
|
| +shortcut to run it after building:
|
| +
|
| +```json
|
| +"variants":
|
| + [
|
| + ...
|
| + {
|
| + "cmd": ["out/Debug/chrome"],
|
| + "name": "run_chrome",
|
| + "shell": true,
|
| + "env": {
|
| + "CHROME_DEVEL_SANDBOX": "/usr/local/sbin/chrome-devel-sandbox",
|
| + },
|
| + },
|
| + ]
|
| +```
|
| +
|
| +### Assigning builds to keyboard shortcuts
|
| +
|
| +To assign a build to a keyboard shortcut, select `Preferences > Key Bindings -
|
| +User` (or `Key Bindings - Default` to see the current key bindings). You can add
|
| +the build variants above with the `"build"` command, like so:
|
| +
|
| +```json
|
| +[
|
| + ...
|
| + { "keys": ["ctrl+shift+u"], "command": "build", "args": {"variant": "unit_tests"} },
|
| + { "keys": ["ctrl+shift+b"], "command": "build", "args": {"variant": "browser_tests"} },
|
| + { "keys": ["ctrl+shift+x"], "command": "build", "args": {"variant": "run_chrome"} },
|
| +]
|
| +```
|
| +
|
| +For more info on custom key bindings, see the
|
| +[Sublime Text Key Bindings Documentation](http://docs.sublimetext.info/en/latest/customization/key_bindings.html).
|
| +
|
| +## Other useful packages
|
| +
|
| +Some other useful packages that improve sublime can be installed from `Ctrl+Shift+P > Install Package`:
|
| +
|
| +* Git enhancements
|
| + * [Git](https://packagecontrol.io/packages/Git)
|
| + * [GitCommitMsg](https://packagecontrol.io/packages/GitCommitMsg) -
|
| + Performs a 'git blame' for one or more lines of code with `Alt + Shift +
|
| + M` (`Command + Shift + M` on Mac)
|
| + * [GitDiffHelper](https://packagecontrol.io/packages/GitDiffHelper) -
|
| + `Ctrl + Alt + G` to open all files modified since the last commit
|
| + * [GitOpenChangedFiles](https://packagecontrol.io/packages/GitOpenChangedFiles) -
|
| + `Ctrl + Shift + O` (`Command + Shift + O` on Mac) to open all files
|
| + modified on the current branch
|
| + * [Git Conflict
|
| + Resolver](https://packagecontrol.io/packages/Git%20Conflict%20Resolver)
|
| + - A GUI for resolving git conflicts
|
| + * [GitGutter](https://packagecontrol.io/packages/GitGutter) - Shows an
|
| + icon next to lines that have been inserted, modified or deleted since
|
| + the last commit.
|
| +* Sidebar enhancements
|
| + * [SyncedSideBar](https://packagecontrol.io/packages/SyncedSideBar) -
|
| + Syncs the currently open file with the expanded tree in the sidebar
|
| + * [SideBarEnhancements](https://packagecontrol.io/packages/SideBarEnhancements) -
|
| + Adds more file management options to the sidebar context menu.
|
| + * [SyncedSidebarBg](https://packagecontrol.io/packages/SyncedSidebarBg) -
|
| + A purely aesthetic improvement that syncs the sidebar background with
|
| + the background color for the current theme.
|
| +* Code navigation tools
|
| + * [AutoFileName](https://packagecontrol.io/packages/AutoFileName) - Auto-
|
| + completes filenames in #includes
|
| + * [Open-Include](https://packagecontrol.io/packagenavigations/Open-
|
| + Include) - Opens the file path under the cursor with `Alt + D`
|
| +* Text tools
|
| + * [Case Conversion](https://packagecontrol.io/packages/Case%20Conversion) -
|
| + automatically changes the case of selected text, e.g. `kConstantName` to
|
| + `CONSTANT_NAME`
|
| + * [Text Pastry](https://packagecontrol.io/packages/Text%20Pastry) -
|
| + Inserts incremental number sequences with multi-select
|
| + * [Wrap Plus](https://packagecontrol.io/packages/Wrap%20Plus) - Auto-wraps
|
| + a comment block to 80 columns with `Alt + Q` (was used to write this
|
| + document! ;-)
|
| + * [Diffy](https://packagecontrol.io/packages/Diffy) - With two files
|
| + opened side-by-side, `Ctrl + k Ctrl + d` will show the differences
|
|
|