Sublime Text 2 move cursor out of parenthesis, quo

2019-01-30 00:17发布

问题:

I need a fast way to make the cursor jump outside the auto wrap qoutes or other syntax elements. I don't want to have to reach down to my arrow keys each time, and definitely don't want to go to my mouse.

Is there a quick and easy way to solve this for my workflow?

回答1:

You can use a shortcut (shift+space, or whatever you like) to move the cursor.

In your Key Bindings - User:

{ "keys": ["shift+space"], "command": "move", "args": {"by": "characters", "forward": true} }


回答2:

I made a few key bindings out of macros as well.

You must make a macro for these, unless you want to spend more time building them, but it's really easy. Just go to Sublime Text, Tools > Record Macro, or hit ctrl Q. Save the file in Packages/User/ and then hit , to open up your User Settings. Paste the settings below in there and boom. ( The | below represents my cursor )

Here are the one's I chose:


Function auto-bracketizer

When the cursour is here:

totallyAwesomeness(|) 

Use the option + tilda shortcut.

⌥ ~

This prefills the function with brackets and the text ' # code... ' highlighted. It only works when inside the parenthesis.

Sublime User Settings

{
"keys": ["option+`"], "command": "run_macro_file", "args": {"file": "Packages/User/superBracketizeFunction.sublime-macro"}
},

Download Macro


Auto-End Line With Semicolon

When the cursour is here:

echo 'say what!!??|'

Use the command + semicolon shortcut.

⌘ ;

This adds a closing ; at the end of current line and moves you to the line below it. It actually works wherever you are on the line.

Sublime User Settings

{
"keys": ["super+;"], "command": "run_macro_file", "args": {"file":  "Packages/User/superEndLineWiSemiColin.sublime-macro"}
},

Download Macro


Exit Argument & Exit Function

When your cursor is anywhere inside the function it will end up here:

public function totallyAwesomeness()
    {
        echo 'say what!!??';
    } |
    echo 'yep... that just happened';

Use the command + enter shortcut.

⌘ Enter

This will let you jump outside the argument and a space to the right as well as anywhere from within the function it will jump you out of it just being the closing bracket.

Sublime User Settings

{
"keys": ["option+enter"], "command": "run_macro_file", "args": {"file": "Packages/User/superExitFunctionArg.sublime-macro"}
},

Download Macro


Just in case you don't know what the path is to your User folder is, it is shown below.

/Users/alexcory/Library/Application Support/Sublime Text 3/Packages/User/

Also the Library folder is usually hidden, so you can download a program called Revealer that will allow you to toggle those hidden files.

If you want to know how I made these just hit me up and I'll show you! :D



回答3:

Best solution for this is recording a macro on Sublime Text and then assigning it to a keyboard shortcut. Follow these steps:

  1. Create a line such as alert('hello') and leave the cursor right after letter 'o'.
  2. Then go to Tools > Record a Macro to start recording.
  3. Press Command+ to go to the end of line.
  4. Press ; and hit Enter
  5. Stop recording the macro by going to Tools > Stop Recording Macro
  6. You can now test your macro by Tools > Playback Macro (optional)
  7. Save your macro by going to Tools > Save Macro (ex: EndOfLine.sublime-macro)
  8. Create a shortcut by adding this between the square brackets in your in your Preferences > Key Bindings - User file:

    {
    "keys": ["super+;"], "command": "run_macro_file", "args": {"file": "Packages/User/EndOfLine.sublime-macro"}
    }
    
  9. Now, every time you hit Command+;, it will magically place the semicolon at the end of current line and move the cursor to the next line.

Happy coding!



回答4:

A more complete way to make a key binding would be:

    { "keys": ["shift+space"], "command": "move", "args": {"by": "characters", "forward": true}, "context":
        [
            { "key": "following_text", "operator": "regex_contains", "operand": "^[)\"\\]]", "match_all": true },
            { "key": "auto_complete_visible", "operator": "equal", "operand": false }
        ]   
    },

Assuming you want shift+space as the shortcut. Or you can change it to tab as well

As found in http://www.sublimetext.com/forum/viewtopic.php?f=3&t=5174#p23086



回答5:

Following Riccardo Marotti's post;

If you would like to bypass the bracket on the next line, you can replace "characters" with "lines" in the args section.

{ "keys": ["shift+space"], "command": "move", "args": {"by": "lines", "forward": true} }


回答6:

on a Dell XPS, Ctrl Enter does the trick for me



回答7:

I just have this feature partially implemented with the help of a plugin named run_multiple_commands.py (see below)

(only tested on ST3, but the plugin is earlier than the first version of ST3 and should work on ST2 too).

Shortcut configuration is as below:

{
    "keys": ["shift+space"],
    "command": "run_multiple_commands",
    "args": {
        "commands": [
            {"command": "move", "args": {"by": "characters", "forward": true} }
        ]
    },
    "context":
    [
        { "key": "preceding_text", "operator": "regex_contains", "operand": "[)\\]}'\"]$", "match_all": true},
        { "key": "auto_complete_visible", "operator": "equal", "operand": false }
    ]
},

{
    "keys": ["shift+space"],
    "command": "run_multiple_commands",
    "args": {
        "commands": [
            {"command": "move", "args": {"by": "characters", "forward": true} },
        ]
    },
    "context":
    [
        { "key": "following_text", "operator": "regex_contains", "operand": "^[)\\]}'\"]", "match_all": true },
        { "key": "auto_complete_visible", "operator": "equal", "operand": false }
    ]
},

{
    "keys": ["shift+space"],
    "command": "run_multiple_commands",
    "args": {
        "commands": [
            {"command": "move_to", "args": {"to": "brackets"} },
        ]
    },
    "context":
    [
        { "key": "following_text", "operator": "regex_contains", "operand": "^[(\\[{]", "match_all": true },
        { "key": "auto_complete_visible", "operator": "equal", "operand": false }
    ]
},

{
    "keys": ["shift+space"],
    "command": "run_multiple_commands",
    "args": {
        "commands": [
            {"command": "move_to", "args": {"to": "brackets"} },
            {"command": "move", "args": {"by": "characters", "forward": true} },
        ]
    },
    "context":
    [
        { "key": "following_text", "operator": "not_regex_contains", "operand": "^[)\\]}'\"]", "match_all": true },
        { "key": "preceding_text", "operator": "not_regex_contains", "operand": "[)\\]}'\"]$", "match_all": true},
        { "key": "following_text", "operator": "not_regex_contains", "operand": "^[(\\[{]", "match_all": true },
        { "key": "auto_complete_visible", "operator": "equal", "operand": false }
    ]
},

One shortcut (shift+space) for four conditions:

  1. cursor is just after quotes or closing parentheses/bracket:

    move one character forward

  2. cursor is just before quotes or closing parentheses/bracket:

    move one character forward

  3. cursor is just before opening parentheses/bracket:

    move to closing parentheses/bracket

  4. !1 && !2 && !3:

    move to closing parentheses/bracket

    and move one more character forward

To use this configuration in your ST, you should first add a file named run_multiple_commands.py to your .../Package/User/ directory, and the content of which is the second code piece of This Article

This solution is just fine for everyday use but is not perfect because:

  1. the cursor is unable to jump out of quotes (just step over it when the cursor is directly followed by one).
  2. the cursor is unable to jump out of the nearest parenthesis, quotes, or brackets when the code block is commented.


回答8:

Ctrl + M is the default one that I have on windows machine. Just do it



回答9:

Perhaps the home and the end key are near to your fingers.



回答10:

I use ctrl+f to move cursor one space forward. Also, on mac, I interchanged caps lock with ctrl. caps lock+f is much easier to reach. It works fairly well for me.



回答11:

I found another way which lies within sublime keybindings itself. Basically, I just modify the keybindings for auto closing parens, that is, I replace "contents": "($0)" with "contents": "($1)$0". Then just hit Tab to get out of the parenthesis. So I add in my keybindings the following:

{ "keys": ["("], "command": "insert_snippet", "args": {"contents": "($1)$0"}, "context":
    [
      { "key": "setting.auto_match_enabled", "operator": "equal", "operand": true },
      { "key": "selection_empty", "operator": "equal", "operand": true, "match_all": true },
      { "key": "following_text", "operator": "regex_contains", "operand": "^(?:\t| |\\)|]|;|\\}|$)", "match_all": true }
    ]
},

And similar for square brackets, curly brackets, and single and double quotes.



回答12:

Ctrl + PgUp Cycle up through tabs

Ctrl + PgDn Cycle down through tabs

This can go to the end of brackets