2.0 to 3.0 Changes

The following is a list of many of the new features, enhancements and bug fixes that were added between Sublime Text 2.0 and Sublime Text 3.0.

  • Performance
    • Significantly improved startup time
    • Significantly improved file load times
    • Significantly improved Replace All performance
    • Improved responsiveness when the system is under high CPU load
    • Improved rendering performance with a large number of gutter icons
    • Improved sidebar performance when folders contain many thousands of files
    • Improved file change detection
    • Improved rendering performance
    • Improved protection against degenerate syntax definitions
    • Removed undesirable animation during startup
    • Improved console scrolling performance on high resolution displays
    • Improved handling of files with extremely long lines
    • Faster loading of large, plain text files
    • Mac: Improved rendering performance, especially on high resolution screens
    • Mac: Reduced CPU usage when gpu_window_buffer is enabled
    • Linux and Mac: Improved memory usage
    • Linux: Improved rendering performance for some systems with Nvidia graphics
  • Software Updates
    • A new auto update system for Windows and Mac
    • Added Linux repositories for apt, yum and pacman
    • All binaries on Windows and Mac are signed, all Linux packages have available GPG signatures
  • Goto Definition
    • Added Goto Definition, powered by an indexer that uses syntax definitions to find symbols
    • Added Goto Symbol in Project
    • Added Jump Back and Jump Forward commands, available from the Goto menu, for navigating between around using definitions
    • Goto Definition popup will be shown when hovering mouse over a symbol. This is controlled with the show_definitions setting.
    • Added Indexing Status to the Help menu to give more information about what the indexer is doing
    • Added index_exclude_patterns setting to control which files get indexed
    • The setting index_workers controls how many background processes are used by the indexer
  • Themes
    • Refreshed UI theme
    • New icon
    • Alternate theme, Adaptive, that inherits colors from the color scheme
    • Support for High DPI displays on all three platforms
    • Themes may now be switched on the fly without artifacts
    • Added theme switcher with live preview via the command palette
    • Added sidebar icons and loading indicators
    • Many additions and bug fixes to the theme engine, plus full documentation
    • Mac: Support for custom color window title bars on OS X 10.10+
  • Fonts
    • Improved font selection on all platforms, allowing selection of different weights by name
    • Added setting theme_font_options to control font rendering of UI elements
    • Font geometry issues that prevent bold or italics are now printed in the console
    • Mac: OS X 10.11 and macOS 10.12+ default to using San Francisco for the UI font
    • Mac: Italic fonts are synthesized when not available in the typeface
    • Windows: Font rendering defaults to DirectWrite unless using Consolas or Courier New
    • Windows: Improved fallback font handling in UI elements
  • Color Schemes
    • Added new color schemes Breakers, Mariana and Sixteen, derived from the excellent work of Chris Kempson and Dmitri Voronianski
    • Added color scheme switcher with live preview via the command palette
    • Color scheme documentation
    • Added popupCss key, for defining default popup style sheets
    • Added phantomCss key, for defining default phantom style sheets
    • Scope naming documentation
  • General UI
    • Settings now open in a new window, with the default and user settings side-by-side
    • Added image preview when opening images
    • Encoding and line endings can be displayed in the status bar with the show_encoding and show_line_endings settings
    • Sidebar remembers which folders are expanded
    • Previewing files from the sidebar creates a preview tab
    • Improved animation in the side bar
    • Deleting a file via the side bar will first close the corresponding view, if any
    • Minimap view rectangle auto hides (controlled by the always_show_minimap_viewport setting)
    • Pressing right in the Goto Anything overlay will open the selected file without closing the overlay
    • Goto Anything supports :line:col syntax in addition to :line
    • Command Palette now remembers the last entered string
    • Enhanced pane management
    • Previewing a file from the side bar will no longer add an entry to the Open Files section of the side bar
    • Added tab scrolling, controlled by the enable_tab_scrolling setting
    • Added Panel Switcher to status bar
    • Improved Console Panel scrolling behavior
    • Tweaked window closing behavior when pressing ctrl+w / cmd+w
    • Automatically closing windows when the last tab is dragged out
    • Changed tab close behavior: the neighboring tab is now always selected
    • When the last file is closed, a new transient file is created automatically
    • remember_open_files setting is now defaults to false. Note that this change will have no effect if the hot_exit setting is left at its default value of true
    • Ctrl+Tab ordering is stored in the session
    • Added remember_full_screen setting
    • Added setting always_prompt_for_file_reload
  • OS Integration
    • Symlinks are followed by default in folders added to the side bar
    • Atomic file saves are available via the atomic_save setting
    • Mac: Handle layout changes due to macOS Sierra tabs
    • Mac: Improved default web browser detection
    • Mac: the user's default shell is executed and environmental variables are set in the plugin Python environment
    • Mac: 10.7 or later is required
    • Mac: 64 bit only
    • Mac: System version of Python is no longer a dependency
    • Mac: Fixed exec command on 10.7
    • Mac: Fixed incompatibility between Dictionary lookup and gpu_window_buffer
    • Mac: Fixed context menus not working when the application is in the background
    • Mac: Added support for line numbers sent via apple events
    • Mac: Added 'New Window' entry to dock menu
    • Mac: The subl executable is now signed
    • Linux: Starting from the command line will daemonize the process by default
    • Linux: Fixed version incompatibilities with libffi
    • Linux: Added menu hiding
    • Linux: Fixed incorrect handling of double clicks in the Find panel
    • Linux: Fixed incorrect underscore display in some menus
    • Linux: Added sudo save
    • Linux: Fixed a file permission issue when running without --wait
    • Posix: Using correct permissions for newly created files and folders
    • Windows: Fixed erroneous entries in system menu
    • Windows: New style Open Folder dialogs are used on Vista and later
    • Windows: SSE support is no longer required for 32 bit builds
    • Windows: Added command line helper, subl.exe
    • Windows: Popup windows are able to receive scroll wheel input
    • Windows: Added more descriptive errors when the Update Installer fails to rename a folder
    • Windows: Fixed incorrect window sizing after making a maximised window full screen
    • Windows: sublime_text.exe now has CompanyName set in VERSIONINFO
    • Windows: Updated code signing certificate to no longer use SHA1
    • Windows: plugin_host.exe is now signed
  • Syntax Definitions
    • Added a custom regex engine that matches multiple regexps in parallel, for faster file loading and indexing
    • Added new syntax definition file format, .sublime-syntax, with enhanced features and testing support
    • Scope naming documentation
    • Added a build system for syntax definitions, including a variant for evaluating syntax definition performance
    • .tmLanguage files may contain a hidden setting, to indicate they shouldn't be displayed to the user
    • The new show_scope_name command shows the scope in a popup
  • Projects
    • Added Edit Project to the Command palette
    • Projects are exposed to the API
    • Multiple workspaces can be created for a single project
    • When adding folders to the sidebar, symlinks are not followed by default. This can be changed by enabling follow_symlinks in the project.
    • "Remove all Folders from Project" now prompts to confirm
  • Editor Control
    • Right clicking on a URL will show an "Open URL" menu item
    • Improved word wrap behavior
    • Improved quote auto pairing logic
    • Smarter word navigation
    • Tweaked brace matching logic
    • Added settings caret_extra_top, caret_extra_bottom and caret_extra_width to control the caret size
    • Added auto_complete_cycle setting
    • Added minimap_scroll_to_clicked_text setting
    • Added invert_selection command
    • Auto complete now works as expected in macros
    • Added Paste from History
    • Fixed Redo sometimes restoring the selection to the incorrect location
  • Build Systems
    • Reworked how Build Systems are selected (More Information)
    • Build Systems may now declare "keyfiles" (e.g., 'Makefile' for the Make build system) to better auto detect which build system to use
    • Improved handling of build systems that generate lots of output
    • New windows always use the automatic build system, rather than the build system of the last used window
    • Build errors are now shown inline at the location where they occurred. This is controlled with the show_errors_inline setting.
    • Added shell_cmd key, which supersedes cmd, with more intuitive syntax
    • Make syntax build system has an improved error message regex
    • Syntax file can be specified for the output
    • Word wrap is enabled by default
    • Build systems may define a cancel command using the "cancel" key
    • Mac: Control+C will cancel the current build
  • Find/Replace
    • Find and Replace panels automatically resize when multi line strings are entered
    • Find panel has a drop down arrow to select previous items
    • Added <current file> option to Find in Files
    • Find in Files will no longer block when FIFOs are encountered
    • Find: Find in Selection will no longer be automatically selected, setting auto_find_in_selection restores older Find in Selection logic
    • Find: Removed Reverse option
    • Find in Files: Improved handling of binary files
    • Find in Files: Line numbers are hidden in the output
  • Spell checking
    • Improved spell checking word selection behavior
    • Spell checker now reads from manually edited user preferences on the fly
    • Added spelling_selector setting, to control what text is checked for misspellings
    • Misspelled words can now be added to the dictionary, in addition to being ignored
    • Fixed Ignored Words not persisting after exiting
    • Fixed a long standing issue with spell checking and non-ascii characters
  • Input Handling
    • Improved matching algorithm used for Goto Anything and Autocomplete, now accepts transposed characters
    • Mac: Added Touch Bar support
    • Linux: Update X11 selection on clipboard every time selection changes
    • Linux: Improved MOD3 modifier key handling
    • Windows: Added touch input
    • Windows: Fix ctrl+` shortcut for UK (ISO) keyboards
    • Windows: ctrl+alt+p is no longer bound by default, due to compatibility issues with some keyboard layouts
  • Unicode
    • Many improvements to unicode support
    • Added combining character rendering
    • Character classes in regex searches and syntax definitions are now unicode aware
    • Goto Anything matching now utilized unicode case insensitivity
    • Improved support for unicode in Windows package directory paths
    • Fixed some unicode handling issues in Goto Anything
  • Packages
    • Added a menu item and command palette entry to install Package Control
    • Default packages are now on GitHub
    • Packages by default are now kept in .sublime-package files, and individual files may be overridden by users
    • Fixed an edge case when loading third party packages from unicode paths on Windows
    • Added Profile Events to the Command Palette, to help identify slow plugins
  • Default Packages
    • Rewrites of the following syntax definitions:
      • ASP
      • Batch File
      • C#
      • C++
      • C
      • CSS
      • D
      • Go
      • HTML
      • Java
      • JavaScript
      • LaTeX
      • Markdown
      • Objective-C++
      • Objective-C
      • PHP
      • Python
      • R
      • Ruby
      • Rust
      • Scala
      • SQL
      • TCL
      • XML
      • YAML
    • HTML and XML tags are closed when </ is entered. This is controlled by the auto_close_tags setting
    • Improved auto indent rules for many syntaxes
    • Fixed incorrect menu mnemonics
  • API/Extensibility
    • Plugins run out-of-process, helping prevent packages from crashing the UI
    • Significantly improved communication speed with plugin_host
    • API is now threadsafe
    • Some API events are now run asynchronously
    • Plugin loading has been revamped, resolving a number of edge cases
    • Upgraded from Python 2.6 to Python 3.3
    • Various unicode and ctypes patches from Python 3.4 have been backported to 3.3
    • The _ssl module is provided on all platforms, and includes a statically-linked copy of OpenSSL 1.0.2k
    • All platforms include the sqlite3 and bz2 modules
    • The termios module is provided on Linux and Mac
    • Plugins can define plugin_loaded() and plugin_unloaded() module functions. plugin_loaded() will be called when the API is ready to use.
    • Plugins may insert small HTML/CSS documents, called Phantoms, inline in the editor control
    • Added ability for plugins to show popup windows with HTML content
    • A custom HTML and CSS engine named minihtml powers popups and phantoms
    • Added Phantom and PhantomSet classes
    • Added ViewEventListener class
    • Added EventListener.on_hover(view, point, hover_zone) method for responding to mouse hover events
    • Added EventListener.on_text_command() and EventListener.on_window_command() to run after commands are executed
    • Added EventListener.on_post_text_command() and EventListener.on_post_window_command()
    • Added EventListener.on_pre_close() callback
    • Fixed EventListener.on_query_completions() not working correctly in some circumstances
    • Added functions to get and set visibility of the sidebar, minimap, status bar, tabs and menu
    • Added Window.status_message()
    • Added Window.extract_variables()
    • Window.show_quick_panel() now accepts the flag sublime.KEEP_OPEN_ON_FOCUS_LOST
    • Window.show_quick_panel() will now scroll to the selected item when shown
    • Window.show_quick_panel() accepts an on_highlighted callback
    • Tweaking handling of Window.show_quick_panel() when items is a mixed list of strings and sequences
    • Added Window.find_output_panel(), Window.destroy_output_panel(), Window.active_panel() and Window.panels()
    • Added Window.create_output_panel() now accepts an optional parameter, "unlisted"
    • Added Window.settings() and Window.template_settings()
    • Window.open_file() now accepts an optional group parameter
    • Added is_valid() method to View and Window, to determine if the handle has been invalidated
    • View.begin_edit() / View.end_edit() are no longer accessible
    • Added View.show_popup() and related functions
    • Added View.is_auto_complete_visible()
    • View.insert() returns the number of characters inserted
    • View.command_history(0, True) now returns the last modifying command, as expected
    • Added View.find_by_class()
    • Added View.expand_by_class()
    • Added View.command_history()
    • Added View.close()
    • Added View.show_popup_menu()
    • View.sel() supports negative indices
    • View.add_regions() will accept package relative paths for the icon
    • View.add_regions() can show underlines
    • View.window() will now work even if the view isn't frontmost
    • Added View.is_primary()
    • Added Sheet.view()
    • Selection.add() no longer ignores the xpos
    • Fixed Selection.contains()
    • Implemented Settings.add_on_change() and Settings.clear_on_change()
    • Fixed settings objects getting invalidated too early with cloned views
    • Plugins may now call Settings.clear_on_change() within a callback from Settings.add_on_change()
    • Calling Settings.add_on_change() from within a settings change callback won't cause the added callback to be run
    • Added sublime.yes_no_cancel_dialog()
    • Added sublime.expand_variables()
    • Added sublime.load_resource(), sublime.load_binary_resource() and sublime.find_resources()
    • Added sublime.encode_value() and sublime.decode_value()
    • Added sublime.get_macro()
  • Robustness
    • Files can now be renamed when only the case has changed
    • File encoding of open files is now stored in the session
    • Stability improvements for Find in Files when using regular expressions that result in significant backtracking
    • Many improvements to file change detection, fixed various crashes
    • Fixed Minimap refusing to draw on very large windows
    • Improved change detection for files that disappear and reappear, as happens with disconnected network drives
    • Fixed a crash that could occur when directories are being rapidly deleted and recreated
    • Fixed a crash that occurred when dragging rows scrolled out of view in the side bar
    • Fixed a long standing plugin_host crash triggered via modal dialogs
    • Fixed a scenario where changes to .tmPreferences files weren't being picked up
    • Fixed a crash that could occur with an invalid result_file_regex settings
    • Fixed not being able to click on the selected row of the auto complete popup
    • Fixed tabset background being set to the wrong color on startup if different colored tabs are used
    • Improved handling of deleted files when restoring sessions
    • Fixed file truncation when using hexadecimal encoding
    • Using Google Breakpad to automatically report crashes
    • Mac: Workaround for an OS issue with zero size windows and OpenGL views
    • Mac: subl command line tool no longer uses Distributed Objects, resolving some intermittent failures
    • Mac: Fixed Emoji & Symbols popup failing to insert text in some cases
    • Mac: Fixed file change notifications from freezing UI on macOS Sierra
    • Windows: Added support for inserting characters from outside of the BMP
    • Many other small, or edge-case, crash fixes