Reputation: 2111
In Sublime Text 2, is it possible to instantly select every other (or odd/even) line and place multiple cursors on those lines?
Thanks.
Upvotes: 201
Views: 91391
Reputation: 1
If it's not a huge amount of lines, you can also of course just hold Ctrl (Cmd on Mac) and click on each line where you want a cursor.
For smaller numbers of lines, this is quicker and easier than running regex commands or adding plugins.
Upvotes: 0
Reputation: 131
I also wrote a plugin to do that, but I'm too lazy to publish it, so you can just create a SelectEveryNthLine.py
file in Packages/User
and put this code inside:
import sublime
import sublime_plugin
class SelectEveryNthLine( sublime_plugin.TextCommand ):
def run( self, edit ):
def on_done( n ):
n = int( n )
selections = self.view.sel()
# if there is nothing selected, then select everything
if len( selections ) == 1 and selections[0].size() == 0:
selections.add( sublime.Region( 0, self.view.size() ) )
new_selections = []
for sel in selections:
for i in range( self.view.rowcol( sel.begin() )[0], self.view.rowcol( sel.end() )[0] + 1, n ):
line_region = self.view.line( self.view.text_point( i, 0 ) )
if not sel.contains( line_region ):
continue
new_selections.append( line_region )
selections.clear()
for sel in new_selections:
selections.add( sel )
# firstly ask for the N
sublime.active_window().show_input_panel( "Enter N to select ever N-th line:", "", on_done, None, None )
You can also create file SelectEveryNthLine.sublime-commands
and put following code inside, to make it accessible from Command Palette:
[
{
"caption": "Select every N-th line",
"command": "select_every_nth_line"
}
]
Upvotes: 0
Reputation: 68790
You can do it easily :
EDIT :
(.*(\n|$)){2}
expressionUpvotes: 108
Reputation: 181
I was searching for a way to select alternate lines in sublime.
Thanks to Joe Daley for a very good answer. Though I realised that, if you use regex it would not select the last line in the file if there is no new-line at the end of the file.
I wanted to improve that answer but I don't seem to have enough reputation at the moment to comment on the answer above.
You can use the following search string with the regex turned on, and then press alt+enter. Followed by a left arrow. This would put a cursor each on alternate lines (same steps as explained by Joe Daley)
^.*\n.*$
Upvotes: 15
Reputation: 46446
.*\n.*\n
Upvotes: 499
Reputation: 20348
You can try with a plugin: Tools/New Plugin...
import sublime_plugin
class ExpandSelectionToOtherLinesCommand(sublime_plugin.TextCommand):
def run(self, edit):
self.view.window().run_command("expand_selection", {"to": "line"})
start_region = self.view.sel()[0]
self.view.window().run_command("select_all")
self.view.sel().subtract(start_region)
Save this file in your Packages/User
.
Then, add the key binding for that plugin:
{ "keys": ["super+alt+l"], "command": "expand_selection_to_other_lines" }
This command will select all other lines. When you have other lines selected, you can use Split selection into lines
command (Ctrl+Shift+L, Cmd+Shift+L on Mac).
If you want to have everythnig in a single shortcut, you can modify the plugin like this:
import sublime_plugin
class ExpandSelectionToOtherLinesCommand(sublime_plugin.TextCommand):
def run(self, edit):
self.view.window().run_command("expand_selection", {"to": "line"})
start_region = self.view.sel()[0]
self.view.window().run_command("select_all")
self.view.sel().subtract(start_region)
self.view.window().run_command("split_selection_into_lines")
self.view.window().run_command("move", {"by": "characters", "forward": False})
The last line is only to remove selection, leaving multiple cursors at the beginning of selected lines.
Upvotes: 7