text/python editor Sublime Text with MAB_WB module_script_plugin. 1.02

正在查看此主题的用户

Cjkjvfnby

Regular
Hello,

Let me introduce you text editor: Sublime Text 2 http://www.sublimetext.com/2
It has most features of notepad++ and many others.

I think you should try it in any way. :smile: (It is free, you can use it unregistered with no restrictions.)

One of the most features it is very easy extensible. And I create one extension for MAB WB.

Mount and blade warband plugin For Sublime text 2

Table of content:
About
Uninstall older versions
Install
Syntax highlighting.
Autocomplete
Formatter
HotKeys
Other versions

About
It is tool for faster development. Current version 1.02


Uninstalling older version:
remove MAB.suplime-package from c:\Users\<username>\AppData\Roaming\Sublime Text 2\Packages\Installed Packages

Clear Create folder in you Packages folder c:\Users\<username>\AppData\Roaming\Sublime Text 2\Packages\MAB folder

Installation:


1. Create folder in you Packages folder c:\Users\<username>\AppData\Roaming\Sublime Text 2\Packages\Mab

2. Unpack archive inside.

3. Restart sublime

Setup:
Mount and blade - settings:
set path : used to open file menu
set version : used to compleatition


Syntax highlighting.
Syntax highlighting auto choose only for module_scripts.
To use it with other files, select it manualy.
Mount and blade - Set syntax
#Right-Bottom corner label Python - click - Select Mab_script
#View - Syntax - Mab_script

Autocomplete:
start typing function name in the begin of new string. press arrows enter of tab.
tip: you don`t need to add brackets at string start


Formatter:
! Use it on own risk ! Make backup before!
Mount and blade - Format script
It just change indent, add/remove spaces and show warnings.

String with error label is not changed (my script can`t recognize them. For example it can be two scripts on one line, just change them manualy to standart if you can. If you don`t know how just sent me feedback)
If any fatal changes was made Important!!! sign is appeared.  Undo changes or fix manualy and sent bugreport.
known issues: does not affect lines "@" with "#"" symbol.

Hot keys:
If you need:
Copy content of keys.sublime-keymap and pascte it to user Default(Windows).sublime-keymap  change it as you wish (I set it to ctrl+shift+a)

New in  1.02
    Add support for 1.001 and Fas.
    Fix formatter.
    Minor changes in show help.

New in 1.01
Fixes in formatter. Now text compaire runs internaly and all errors shown in one log.
Add Mount and blade menu. All commands present.
Add commands to command palite (CTRL+SHIFT+P, select command). Hase same commands as Menu
Add open files and change path to module system to menu.
Add show help (move cursor to operation and activate)

syntax.png

Downloads https://github.com/Cjkjvfnby/Sublime_MAB_plugin/zipball/release-102


PS. If you use plugin just put comment. When there will be enoth comments I just put this to tools.
 
First of all. Thank you for making me discover Sublime Text.
Is... a-m-a-z-i-n-g. I've switched already from Notepad++ and I've only worked a few hours with it.

I'll be using your plugins.
This editor even has a build system and works over the three major platforms.
Is delightfully minimalist, has loads and loads of plugins and the workflow is just pretty.

A fan of your works already.
 
Swyter 说:
I'll be using your plugins.
This editor even has a build system and works over the three major platforms.
Is delightfully minimalist, has loads and loads of plugins and the workflow is just pretty.

You can build module system from it.
Get: http://forums.taleworlds.com/index.php/topic,212663.0.html
Open main.py and run it (ctrl+b)

A fan of your works already.
Thanks. 
 
I couldn't seem to get your plugin to work, but Sublime is wonderful.  Beats the pants off gedit and vim :smile:  Might even give it a try for perl development as well.
 
Ctrl+Shift+A seems to do nothing for me.  When I look in the menus Ctrl+Shift+A "Expand Selection to Tag".  Its not a huge issue though.
 
bobross419 说:
Ctrl+Shift+A seems to do nothing for me.  When I look in the menus Ctrl+Shift+A "Expand Selection to Tag".  Its not a huge issue though.

It is my fail.
I made update and change installation instruction.
 
Sorry I missed this post before.  Changing the keymapping worked for me :smile:  Apparently though the formatter does not play nicely with WFaS.  In addition to some errors during the format itself I also have a massive log file documenting the differences between the two files.  Primarily it looks like neg| and this_or_next| commands were removed in a lot of places.

https://docs.google.com/open?id=0B5wh-BuoZdB5YWFmN2YzYWUtYjk5Yi00ZDY4LThmYzgtODczYTA2NDg5ODY4

I was just going to post the results but 140k characters is well over the post limit here :sad:

I will post up the results that appeared while the formatter was running though.  I can't make too much sense of them.  I don't see any difference between the finish_mission operation in WB and WFaS - Neither have any arguments.  And when I tried to remove the 'delay_in_seconds' from the entry in operations.py there was no change when I reran the formatter.
插入代码块:
line: 3896  : Not enough args: finish_mission )
line: 5913  : Too many args: player_get_value_of_original_items ":old_items_value", ":latest_joined_player_no"
line: 6258  : Not enough args: player_set_gold ":dead_agent_player_id", ":player_gold")
line: 7118  : Not enough args: player_set_gold ":player_no", ":initial_gold")
line: 7148  : Not enough args: player_set_gold ":player_no", ":initial_gold")
line: 8115  : Too many args: assign ":friend_near_score", 300, ":dist_2"
line: 8943  : Not enough args: is_between ":value", "$g_multiplayer_max_num_bots")
line: 11523 : Too many args: create_text_overlay ":wave_text", "str_wave_reg1", tf_center_justify|tf_single_line|tf_with_outline
line: 11527 : Error 		(overlay_set_additional_render_height, ":wave_text", 10),
line: 11897 : Not enough args: multiplayer_find_spawn_point reg0, ":team_no", ":flags")
line: 12263 : Too many args: set_result_string "@Base damage radius: {reg1}, critical radius: {reg2}"
line: 13152 : Too many args: modify_visitors_at_site ":meeting_scene"), (reset_visitors
line: 13177 : Too many args: modify_visitors_at_site ":meeting_scene"), (reset_visitors
line: 13846 : Error     ]), #ozan
line: 15714 : Not enough args: hero_can_join )
line: 15925 : Too many args: val_mul ":quest_gold_reward", ":quest_gold_reward", 7
line: 15926 : Too many args: val_div ":quest_gold_reward", ":quest_gold_reward", 4
line: 17044 : Not enough args: party_get_slot ":party_type", ":party_no")
line: 17094 : Not enough args: party_get_slot ":party_type", ":party_no")
line: 18742 : Not enough args: party_stack_get_troop_id ":raid_leader", ":looter_party")
line: 19268 : Not enough args: store_sub ":cur_center_left_strength", 1000000)
line: 19541 : Not enough args: store_sub ":cur_center_left_strength", 1000000)
line: 22061 : Too many args: neq ":troop_no", kingdom_ladies_begin, kingdom_ladies_end
line: 22135 : Too many args: modify_visitors_at_site ":dungeon_scene"), (reset_visitors
line: 22506 : Error   ]), #ozan
line: 22722 : Error   ]), #ozan
line: 22891 : Error       ]), #ozan
line: 22956 : Error   ]), #ozan
line: 25929 : Error 	(team_get_gap_distance, ":cur_gap_distance", ":team_no", ":class_no"),
line: 26847 : Not enough args: faction_get_slot ":faction_leader", "$players_kingdom")
line: 27452 : Error     [  (try_for_range, ":troop_no", companions_begin, companions_end),
line: 28323 : Too many args: cur_agent_set_banner_tableau_material ":tableau_no", reg0
line: 28728 : Too many args: cur_tableau_add_horse ":horse_item", pos2, "anim_horse_stand", 0
line: 30262 : Error 	   (party_set_ignore_with_player_party, "p_main_party", ":num_hours"),
line: 34609 : Error    [   (assign, ":end_cond", 1),
line: 35127 : Not enough args: party_count_members_of_type ":count", "p_main_party")
line: 36939 : Error 						(party_get_ignore_with_player_party, ":ignore_with_player_party", ":second_party"),
line: 37066 : Not enough args: party_remove_prisoners ":party_no", ":troop_no")
line: 43150 : Error 					(remove_agent, ":agent_no"),
line: 43172 : Error 				(remove_agent, ":horse_agent"), 
line: 43223 : Error 		(agent_is_in_line_of_sight, ":agent_no", pos51),
line: 43258 : Error         (agent_deliver_damage_to_agent_advanced, ":delivered_damage", ":shooter_agent_no", ":agent_no", ":damage"),
line: 43346 : Error          (particle_system_burst_no_sync, "psys_oim_pistol_smoke", pos51, 8),
line: 43347 : Error          (particle_system_burst_no_sync, "psys_oim_pistol_ogon", pos51, 8),
line: 43348 : Error          (particle_system_burst_no_sync, "psys_oim_pistol_svet", pos51, 8),
line: 43352 : Error          (particle_system_burst_no_sync, "psys_oim_musket_powder_a", pos51, 8),
line: 43353 : Error          (particle_system_burst_no_sync, "psys_oim_pistol_powder_b", pos51, 15),
line: 43358 : Error          (particle_system_burst_no_sync, "psys_oim_musket_smoke", pos51, 8),
line: 43359 : Error          (particle_system_burst_no_sync, "psys_oim_musket_ogon", pos51, 8),
line: 43360 : Error          (particle_system_burst_no_sync, "psys_oim_musket_svet", pos51, 8),
line: 43364 : Error          (particle_system_burst_no_sync, "psys_oim_musket_powder_a", pos51, 8),
line: 43365 : Error          (particle_system_burst_no_sync, "psys_oim_pistol_powder_b", pos51, 15),
line: 43386 : Error 		(particle_system_burst_no_sync, "psys_musket_hit", pos1, 8),
line: 43387 : Error 		(particle_system_burst_no_sync, "psys_musket_hit_particle", pos1, 8),
line: 43391 : Error 		(particle_system_burst_no_sync, "psys_musket_hit_objects", pos1, 8),
line: 45317 : Too many args: create_text_overlay reg0, "str_preg1p", tf_left_align|tf_with_outline
line: 45333 : Too many args: create_text_overlay reg0, "str_reg1", tf_left_align|tf_with_outline
line: 45386 : Too many args: create_text_overlay ":wave_text", "str_wave_reg1", tf_center_justify|tf_single_line|tf_with_outline
line: 45402 : Too many args: create_text_overlay ":wave_text", "str_wave_reg1", tf_center_justify|tf_single_line|tf_with_outline
line: 45418 : Too many args: create_text_overlay ":wave_text", "str_wave_reg1", tf_center_justify|tf_single_line|tf_with_outline
line: 45641 : Error 	(particle_system_burst_no_sync, "psys_water_hit_a", pos51, 8),
line: 45643 : Error 	(particle_system_burst_no_sync, "psys_water_hit_b", pos51, 4),
line: 45674 : Too many args: cur_tableau_add_horse ":horse_item", pos2, "anim_horse_stand", 0
line: 45869 : Error 				(scene_prop_fade_out, ":prison_cart", 400),
line: 45870 : Error 				(scene_prop_fade_out, ":prison_cart_door_left", 400),
line: 45871 : Error 				(scene_prop_fade_out, ":prison_cart_door_right", 400),
line: 45885 : Error 				(scene_prop_fade_in, ":prison_cart", 300),
line: 45886 : Error 				(scene_prop_fade_in, ":prison_cart_door_left", 300),
line: 45887 : Error 				(scene_prop_fade_in, ":prison_cart_door_right", 300),
line: 46092 : Too many args: position_set_x pos2, 84, 0
line: 46093 : Too many args: position_set_y pos2, -314, 0
line: 46094 : Too many args: position_set_z pos2, 121, 0
line: 46102 : Too many args: position_set_x pos2, -84, 0
line: 46103 : Too many args: position_set_y pos2, -315, 0
line: 46104 : Too many args: position_set_z pos2, 123, 0

I'm sure that WFaS compatibility isn't high on your list of priorities so if it isn't fixed it isn't horrible.  Just using Sublime has increased my productivity :smile:
 
bobross419 说:
Sorry I missed this post before.  Changing the keymapping worked for me :smile:  Apparently though the formatter does not play nicely with WFaS.  In addition to some errors during the format itself I also have a massive log file documenting the differences between the two files.  Primarily it looks like neg| and this_or_next| commands were removed in a lot of places.

https://docs.google.com/open?id=0B5wh-BuoZdB5YWFmN2YzYWUtYjk5Yi00ZDY4LThmYzgtODczYTA2NDg5ODY4

I was just going to post the results but 140k characters is well over the post limit here :sad:

I will post up the results that appeared while the formatter was running though.  I can't make too much sense of them.  I don't see any difference between the finish_mission operation in WB and WFaS - Neither have any arguments.  And when I tried to remove the 'delay_in_seconds' from the entry in operations.py there was no change when I reran the formatter.
插入代码块:
line: 3896  : Not enough args: finish_mission )
line: 5913  : Too many args: player_get_value_of_original_items ":old_items_value", ":latest_joined_player_no"
line: 6258  : Not enough args: player_set_gold ":dead_agent_player_id", ":player_gold")
line: 7118  : Not enough args: player_set_gold ":player_no", ":initial_gold")
line: 7148  : Not enough args: player_set_gold ":player_no", ":initial_gold")
line: 8115  : Too many args: assign ":friend_near_score", 300, ":dist_2"
line: 8943  : Not enough args: is_between ":value", "$g_multiplayer_max_num_bots")
line: 11523 : Too many args: create_text_overlay ":wave_text", "str_wave_reg1", tf_center_justify|tf_single_line|tf_with_outline
line: 11527 : Error 		(overlay_set_additional_render_height, ":wave_text", 10),
line: 11897 : Not enough args: multiplayer_find_spawn_point reg0, ":team_no", ":flags")
line: 12263 : Too many args: set_result_string "@Base damage radius: {reg1}, critical radius: {reg2}"
line: 13152 : Too many args: modify_visitors_at_site ":meeting_scene"), (reset_visitors
line: 13177 : Too many args: modify_visitors_at_site ":meeting_scene"), (reset_visitors
line: 13846 : Error     ]), #ozan
line: 15714 : Not enough args: hero_can_join )
line: 15925 : Too many args: val_mul ":quest_gold_reward", ":quest_gold_reward", 7
line: 15926 : Too many args: val_div ":quest_gold_reward", ":quest_gold_reward", 4
line: 17044 : Not enough args: party_get_slot ":party_type", ":party_no")
line: 17094 : Not enough args: party_get_slot ":party_type", ":party_no")
line: 18742 : Not enough args: party_stack_get_troop_id ":raid_leader", ":looter_party")
line: 19268 : Not enough args: store_sub ":cur_center_left_strength", 1000000)
line: 19541 : Not enough args: store_sub ":cur_center_left_strength", 1000000)
line: 22061 : Too many args: neq ":troop_no", kingdom_ladies_begin, kingdom_ladies_end
line: 22135 : Too many args: modify_visitors_at_site ":dungeon_scene"), (reset_visitors
line: 22506 : Error   ]), #ozan
line: 22722 : Error   ]), #ozan
line: 22891 : Error       ]), #ozan
line: 22956 : Error   ]), #ozan
line: 25929 : Error 	(team_get_gap_distance, ":cur_gap_distance", ":team_no", ":class_no"),
line: 26847 : Not enough args: faction_get_slot ":faction_leader", "$players_kingdom")
line: 27452 : Error     [  (try_for_range, ":troop_no", companions_begin, companions_end),
line: 28323 : Too many args: cur_agent_set_banner_tableau_material ":tableau_no", reg0
line: 28728 : Too many args: cur_tableau_add_horse ":horse_item", pos2, "anim_horse_stand", 0
line: 30262 : Error 	   (party_set_ignore_with_player_party, "p_main_party", ":num_hours"),
line: 34609 : Error    [   (assign, ":end_cond", 1),
line: 35127 : Not enough args: party_count_members_of_type ":count", "p_main_party")
line: 36939 : Error 						(party_get_ignore_with_player_party, ":ignore_with_player_party", ":second_party"),
line: 37066 : Not enough args: party_remove_prisoners ":party_no", ":troop_no")
line: 43150 : Error 					(remove_agent, ":agent_no"),
line: 43172 : Error 				(remove_agent, ":horse_agent"), 
line: 43223 : Error 		(agent_is_in_line_of_sight, ":agent_no", pos51),
line: 43258 : Error         (agent_deliver_damage_to_agent_advanced, ":delivered_damage", ":shooter_agent_no", ":agent_no", ":damage"),
line: 43346 : Error          (particle_system_burst_no_sync, "psys_oim_pistol_smoke", pos51, 8),
line: 43347 : Error          (particle_system_burst_no_sync, "psys_oim_pistol_ogon", pos51, 8),
line: 43348 : Error          (particle_system_burst_no_sync, "psys_oim_pistol_svet", pos51, 8),
line: 43352 : Error          (particle_system_burst_no_sync, "psys_oim_musket_powder_a", pos51, 8),
line: 43353 : Error          (particle_system_burst_no_sync, "psys_oim_pistol_powder_b", pos51, 15),
line: 43358 : Error          (particle_system_burst_no_sync, "psys_oim_musket_smoke", pos51, 8),
line: 43359 : Error          (particle_system_burst_no_sync, "psys_oim_musket_ogon", pos51, 8),
line: 43360 : Error          (particle_system_burst_no_sync, "psys_oim_musket_svet", pos51, 8),
line: 43364 : Error          (particle_system_burst_no_sync, "psys_oim_musket_powder_a", pos51, 8),
line: 43365 : Error          (particle_system_burst_no_sync, "psys_oim_pistol_powder_b", pos51, 15),
line: 43386 : Error 		(particle_system_burst_no_sync, "psys_musket_hit", pos1, 8),
line: 43387 : Error 		(particle_system_burst_no_sync, "psys_musket_hit_particle", pos1, 8),
line: 43391 : Error 		(particle_system_burst_no_sync, "psys_musket_hit_objects", pos1, 8),
line: 45317 : Too many args: create_text_overlay reg0, "str_preg1p", tf_left_align|tf_with_outline
line: 45333 : Too many args: create_text_overlay reg0, "str_reg1", tf_left_align|tf_with_outline
line: 45386 : Too many args: create_text_overlay ":wave_text", "str_wave_reg1", tf_center_justify|tf_single_line|tf_with_outline
line: 45402 : Too many args: create_text_overlay ":wave_text", "str_wave_reg1", tf_center_justify|tf_single_line|tf_with_outline
line: 45418 : Too many args: create_text_overlay ":wave_text", "str_wave_reg1", tf_center_justify|tf_single_line|tf_with_outline
line: 45641 : Error 	(particle_system_burst_no_sync, "psys_water_hit_a", pos51, 8),
line: 45643 : Error 	(particle_system_burst_no_sync, "psys_water_hit_b", pos51, 4),
line: 45674 : Too many args: cur_tableau_add_horse ":horse_item", pos2, "anim_horse_stand", 0
line: 45869 : Error 				(scene_prop_fade_out, ":prison_cart", 400),
line: 45870 : Error 				(scene_prop_fade_out, ":prison_cart_door_left", 400),
line: 45871 : Error 				(scene_prop_fade_out, ":prison_cart_door_right", 400),
line: 45885 : Error 				(scene_prop_fade_in, ":prison_cart", 300),
line: 45886 : Error 				(scene_prop_fade_in, ":prison_cart_door_left", 300),
line: 45887 : Error 				(scene_prop_fade_in, ":prison_cart_door_right", 300),
line: 46092 : Too many args: position_set_x pos2, 84, 0
line: 46093 : Too many args: position_set_y pos2, -314, 0
line: 46094 : Too many args: position_set_z pos2, 121, 0
line: 46102 : Too many args: position_set_x pos2, -84, 0
line: 46103 : Too many args: position_set_y pos2, -315, 0
line: 46104 : Too many args: position_set_z pos2, 123, 0

I'm sure that WFaS compatibility isn't high on your list of priorities so if it isn't fixed it isn't horrible.  Just using Sublime has increased my productivity :smile:

Thanks for feedback. 
 
Somehow my 'comment' hotkey, ctrl+/, doesn't work with mab syntax highlighting. Am I doing something wrong or is this a problem with the syntax highlighting?
 
Barabas 说:
Somehow my 'comment' hotkey, ctrl+/, doesn't work with mab syntax highlighting. Am I doing something wrong or is this a problem with the syntax highlighting?

I will fix it in next release.
 
Make update:
+Autocomplete
Change install instruction.
Broke formatter (fix it in next release)

bobross419 说:
I'm sure that WFaS compatibility isn't high on your list of priorities so if it isn't fixed it isn't horrible.  Just using Sublime has increased my productivity :smile:

Plugin is WFaS compatible. 
Formatter just does not work at all versions. :smile:

Barabas 说:
Somehow my 'comment' hotkey, ctrl+/, doesn't work with mab syntax highlighting. Am I doing something wrong or is this a problem with the syntax highlighting?
Fixed.
 
New in 1.01
  Fixes in formatter. Now text compaire runs internaly and all errors shown in one log.
  Add Mount and blade menu. All commands present.
  Add commands to command palite (CTRL+SHIFT+P, select command). Hase same commands as Menu
  Add open files and change path to module system to menu.
  Add show help (move cursor to operation and activate) Thanks Lav for Better MS Scripting Reference: header_operations expanded
 
That looks pretty spectacular. Congratulations!

Couple options I've always wanted and did not have anywhere:
1. Preserve vertical wrapping folding settings of the edited file on exit.
2. Exclude comment lines from vertical wrapper fold block recognition

3. I could not find how to make the editor highlight pairs of brackets in the code on placing cursor (or mouse pointer) on one of brackets, although I'm sure the functionality should be there somewhere

EDIT found some bracket/folding plugins :smile:
 
GetAssista 说:
That looks pretty spectacular. Congratulations!

Couple options I've always wanted and did not have anywhere:
1. Preserve vertical wrapping folding settings of the edited file on exit.
Done . Will add in next release. (already in master https://github.com/Cjkjvfnby/Sublime_MAB_plugin/zipball/master)

Folding is not vertical it is from point to point. You can fold it by CTRL+SHIFT+[ on any selection.  CTRL+SHIFT+] (unfold)
If you select some text and put mouse to line numbers you can fold  parts by indent.

2. Exclude comment lines from vertical wrapper fold block recognition
Not understand. Explain in other way.

3. I could not find how to make the editor highlight pairs of brackets in the code on placing cursor (or mouse pointer) on one of brackets, although I'm sure the functionality should be there somewhere
EDIT found some bracket/folding plugins :smile:
Share you result.
 
Cjkjvfnby 说:
2. Exclude comment lines from vertical wrapper fold block recognition
Not understand. Explain in other way.
Cjkjvfnby 说:
If you select some text and put mouse to line numbers you can fold  parts by indent.
^ when folding by indent is done, it stumbles on comment lines that do not respect indent. IMO, comment lines should be fully transparent in this regard, people tend to comment out blocks of code not respecting indents all the time. Example from ms py files:
插入代码块:
("script_name",
   code
#   code <- trying to fold a script through mouse and line numbers will fold it up to this line, not up to the ending bracket. 
   code
)
EDIT: in fact all the folding options will stumble on comment lines as long as comment does not respect indentation. Module system has lots of such comments. Also, ST's own "Toggle block comment" does not respect indentation structure. Which is perfectly ok IMO, as long as it be consistent with folding :smile:

Bracket highlighter is here (I'll modify it for my taste)

Kudos for such a transparent and useful piece of software! I already uninstalled my np++ (kidding. but will hardly use it ever again. Unless you end up demanding exorbitant money for users to continue using ST :smile:)
 
Version 1.02 is released
    Add support for 1.011 and Fas
    Fix formatter
    Minor changes in show help.

GetAssista 说:
^ when folding by indent is done, it stumbles on comment lines that do not respect indent. IMO, comment lines should be fully transparent in this regard, people tend to comment out blocks of code not respecting indents all the time. Example from ms py files:
插入代码块:
("script_name",
   code
#   code <- trying to fold a script through mouse and line numbers will fold it up to this line, not up to the ending bracket. 
   code
)
EDIT: in fact all the folding options will stumble on comment lines as long as comment does not respect indentation. Module system has lots of such comments. Also, ST's own "Toggle block comment" does not respect indentation structure. Which is perfectly ok IMO, as long as it be consistent with folding :smile:

My view on that point is formatter. One of its features is making code indentation correct.
 
Sorry to revive a thread so old, but I'm really looking forward to using Sublime Text 2, seeing what people are saying. Downloaded it, fell in love with it. I love that minimalistic interface, the minimap, the SpaceCadet blacky color theme. But...
In Notepad++, I can see tab names with no problems whatsoever, and I have the Windows... window, which is sometimes helpful.
61sQX.png
In Sublime, I have this:
BkK64.png
... and I couldn't find a Windows window. Any fix to that?
Also, in N++ I have the Right-Click + Scroll (Shift+Tab) funciotn that changes between tabs with a nice popup window that tells me where I'm going. Sublime's Shift+Tab seems to be a bit random, and is harder to use.
Any tips about these? I really want to use Sublime.
 
后退
顶部 底部