-
Notifications
You must be signed in to change notification settings - Fork 0
This plugin is to integrate the soar debugger within a vim environment. It will mimic the soar debugger layout and allow normal debugging operations.The big benefit is interleaving editing and testing soar agents, where you can edit and reload soar rules while the agent is running.
License
amininger/vim-soar-plugin
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Soar Vim Plugin Author: Aaron Mininger Written: Summer 2017 Purpose: This plugin is to integrate the soar debugger within a vim environment. It will mimic the soar debugger layout and allow normal debugging operations. The big benefit is interleaving editing and testing soar agents, where you can edit and reload soar rules while the agent is running This plugin also has a few features specific to the soargroup Rosie project =================================================== PREREQUISITES The code for editing soar files has no prereqs DEBUGGER ONLY: You need vim compiled with either python2 or python3 support SOAR with sml_python You can pass --python=python3 into scons to compile with python 3: $> python2 scons/scons.py sml_python --python=python3 Add $SOAR_HOME to PYTHONPATH =================================================== INSTALLATION Suggested directory location is ~/.vim/bundle * PLAIN (no plugin manager) Put the following in your vimrc: set runtimepath^=~/.vim/bundle/vim-soar-plugin set nocompatible filetype off filetype plugin indent on runtime plugin/vim-soar-plugin.vim * VUNDLE This plugin is compatible with vundle, just add the following line to your vimrc to the section sourcing plugins (see github.com/VundleVim/Vundle.vim for more info) Plugin 'amininger/vim-soar-plugin' =================================================== PROJECT ORGANIZATION autoload - Contains soar debugger specific code, only loaded when SoarDebugger command is executed doc - Contains help for using the debugger ftdetect - Tells vim to recognize the .soar file extension ftplugin - Sets .soar file specific commands, including editing key mappings indent - Code to properly indent soar files plugin - Code that defines functions and commands for editing soar files python - Python code that creates and runs soar agents for the debugger templates - Collection of soar templates that can be inserted through the InsertSoarTemplate command (you can add more) ================================================== EDITING COMMANDS AND FEATURES Even if you don't run the debugger, this plugin offers useful features for editing .soar files """ EDITING ;or | Open the soar file defining the current rule name in a new tab [cursor is on rule name] ;op | Open the soar file defining the current production in a new tab [cursor is inside production] Note: These assume that the global variable g:root_agent_directory is set """ COPYING ;yp | Yank (to buffer) the current production [cursor is inside production] ;yr | Yank (to buffer) the current rule name [cursor is on rule name] ;cp | Copy (to clipboard) the current production [cursor is inside production] ;cr | Copy (to clipboard) the current rule name [cursor is on rule name] """ DELETING ;dp | Delete the current production [cursor is inside production] """ COMMENTING ;#p | Comment the current production [cursor is inside production] ;u#p | Uncomment the current production [cursor is inside production] (can also use ;3p and ;u3p respectively) """ Managing Source Files :AddFileToSoarSource Looks for a file in the same directory called <dir_name>_source.soar And will append a line 'source <cur_file>' :SourceSoarDirectory <soar_dir> Will add 3 lines to the current file which will source a soar directory of the given name: pushd <soar_dir> source <soar_dir>_source.soar popd Autocompletes using current subdirectories ================================================== RUNNING THE EXAMPLE AGENT (Basic Tutorial) 1. Open vim in the current soar_plugin/example directory 2. Run the command :SoarDebugger example.config This will open the debugger window layout and put the agent in a ready state 3. Type # to bring up a soar prompt, then enter 'p s1' to print the top-state 4. Type H. This should run 1 DC and do the init-agent operator 5. Move the cursor to the O1 identifier and type ;p2, this will print O1 to a depth of 2 6. Type ;ma which will run the matches command, showing which rules match 7. Move the cursor to the counting-agent*apply*init-agent rule name and type ;pr This will print the production with the rule name under the cursor 8. Move the cursor inside the printed production and type ;mp This will show why the production currently matches 9. Type U which will run the agent 10 decision cycles (it should count from 1-10) 10. Type :CloseDebugger to close the debugger ================================================== DEBUGGER COMMANDS SoarDebugger <config-file> # Launch the debugger # You can pass an optional <config-file> to use to initialize the agent (details below) RemoteDebugger # Will connect to a remote Soar kernel and allow you debug remotely ResetDebugger # Complete destroys and restarts the agent from a clean state (discards learned rules) CloseDebugger # Closes the debugger and deletes the agent SourceCurrentFile # The currently running agent will source the current file SourceSoarFile <filename> # The currently running agent will source the specified file AddFileToSource # Looks for <dir>_source.soar and appends a source command for the current file InsertSoarTemplate <template> # Inserts a soar template of the given template name into the current file RejectSoarOperator <op-name> # Will reject all operators with the given name for 1 dc AddPInterrupt <op-name> # Will source a rule that interrupts when the given operator is proposed AddSInterrupt <op-name> # Will source a rule that interrupts when the given operator is selected RemoveInterrupt <op-name> # Will excise an interrupt rule for the given operator RemoveAllInterrupts # Will excise all interrupt rules created by the debugger RemoveWaits # Will delete lines from the end of the debugger until it hits a non-wait operator ================================================== DEBUGGER FUNCTIONS :call FilterChunks("match_str") # Will print out any chunks with the given string in the rule name :call FilterRules("match_str") # Will print out any rules with the given string in the rule name :call ExtractFiredRules("filename") # Will write all fired rules to the given file ================================================== CONFIG FILE OPTIONS agent-name = <string> | The name of the agent agent-source = <filename> | The soar file to source smem-source = <filename> | The soar file sourcing any smem code source-output = full|summary|none | How much output to print when sourcing files watch-level = <int> | The watch level to print information at (default=1) spawn-debugger = <bool> | If true, will spawn the soar debugger externally (default=false) write-to_stdout = <bool> | If true, will print all output to std out (default=false) enable-log = <bool> | If true, will write all soar output to a file log-filename = <str> | The name to give the log file (defaults to agent-log.txt) ================================================== DEFAULT VIM MAPPINGS Many commands are ; followed by a shortcode This does remap the keyboard shortcuts for H U # and Ctrl+P To disable these shortcuts, define the following global variable in your vimrc let g:enable_soar_plugin_mappings = 0 """ Executing Soar Commands # | Execute a custom soar command (will bring up prompt) """ Running the Agent ;re | Run 1 elaboration cycle (run 1 -e) H | Run 1 decision cycle U | Run 10 decision cycles ;ru | Run 1000 decision cycles ;rsu | Run 1000 decision cycles 'slowly' (will run at about 100 DC/s instead of full speed) ;rf | Run forever (until interrupted). Note: This is discouraged, vim will hang forever unless soar stops itself ;rsf | Run forever slowly (until interrupted). Again, issues if soar never interrupts ;r# | Run 10^# dc's: ;r2 will run 100 ;r4 will run 10000 ;rs# | Run 10^# dc's slowly :RunAgent [n] | Run custom number of dc's :RunSlow [n] | Run custom number of dc's slowly """ PRINTING ;pr | Prints the full production [cursor is on rule name] ;p# | Print the current identifier to # depth (;p2 ;p4 ...) [cursor is on identifier] ;st | Prints out the current state (bottom of the stack) ;s# | Prints out the current state to # depth (;s2) ;o# | Prints out the current operator to # depth (;o2) ;aa | Does the last print command (a)gain, but with the depth increased by 1 ;a# | Does the last print command (a)gain, but with the depth increased by # """ EDITING ;or | Open the soar file defining the current rule name in a new tab [cursor is on rule name] ;op | Open the soar file defining the current production in a new tab [cursor is inside production] """ COPYING ;yp | Yank (to buffer) the current production [cursor is inside production] ;yr | Yank (to buffer) the current rule name [cursor is on rule name] ;cp | Copy (to clipboard) the current production [cursor is inside production] ;cr | Copy (to clipboard) the current rule name [cursor is on rule name] """ DELETING ;dp | Delete the current production [cursor is inside production] """ COMMENTING ;#p | Comment the current production [cursor is inside production] ;u#p | Uncomment the current production [cursor is inside production] (can also use ;3p and ;u3p respectively) """ SOURCING ;sp | Source the current production [cursor is inside production] """ EXCISING ;ep | Excises the current production [cursor is inside production] ;er | Excises the current rule [cursor is on rule name] """ MATCHING ;ma | Runs the matches command ;mp | Runs the matches command with the current production [cursor is inside production] ;mr | Runs the matches command with the current rule name [cursor is on rule name] """ Print firing count ;fcp | Runs the fc command with the current production [cursor is inside production] ;fcr | Runs the fc command with the current rule name [cursor is on rule name] """ TEMPLATES Ctrl+P | Goes to the next insertion point in a template (marked by #!#) ================================================ ROSIE SPECIFIC FEATURES I recommend adding the following to a .vimrc: let g:root_agent_directory = $ROSIE_HOME."/agent" This will allow shortcuts that open soar rules (;op) to find the right files :RosieDebugger [config_file] Will open the rosie-specific debugger with the given rosie config file If config_file is not given, vim will prompt for an agent name from rosie/test-agents A default can be specified via: let g:default_rosie_agent = "name" Similarly, :MobileDebugger :CozmoDebugger :ThorDebugger will setup rosie for the different external environments :call SendMessageToRosie() Will show a prompt to let you send a natural language sentence to rosie :call PrintRosieWorld("S1") or ;prw Prints the top-state world in a nicely-formatted way ================================================ SOAR PARSING HELPER FUNCTION """ Other useful functions for parsing soar productions GetSoarProductionBody(line_num) Returns the production a the given line (as a string) If line_num is not given, this will use the current cursor position GetSoarProductionName(line_num) Returns the name of the production at the given line If line_num is not given, this will use the current cursor position GetSoarWord(row, col) Returns the soar word at the given position (considers a word to be alpha-numeric, plus underscore, hypthen, and asterisk) If row/col are not given, this will use the current cursor position GetSoarProductionInfo(line_num, commented) Gets information about the soar production at the given line number (line_num can be anywhere inside the production) If no line_num is given, uses the current cursor position if commented is given and equals 1, this will look for #'s in front returns a 3-index array if inside a production (empty array otherwise) prod_info[0] = production start line number prod_info[1] = production end line number prod_info[2] = production name
About
This plugin is to integrate the soar debugger within a vim environment. It will mimic the soar debugger layout and allow normal debugging operations.The big benefit is interleaving editing and testing soar agents, where you can edit and reload soar rules while the agent is running.
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published