--- date: 2014-09-13 title: My Pythony Puppet Ruby vim IDE category: devops featured_image: https://i.imgur.com/0k24Ambl.png --- Despite my penchant for tools written in Ruby (Puppet, Gitlab, Jekyll/Octopress etc) I do not actually like Ruby. I am more of a Python guy. I also like Vim, so whenever I use a GUI IDE I end up with something littered with `:w` and `ZZ`. Despite my pythonic leanings, I also need something that can handle Ruby and Puppet's DSL. To which end, this is a bit of a mixture. Fortunately, nothing in either world really contradicts the other, so it works pretty nicely. First, the basic environments. Git is needed everywhere, plus I need to isolate the environments of the various projects. sudo apt install git python python-dev python-virtualenv \ virtualenvwrapper curl libxml2-dev libxslt-dev zlib1g-dev ruby-dev echo "pip install pyflakes" >> ~/.virtualenvs/postmkvirtualenv curl -sSL https://get.rvm.io | bash -s stable --ruby Now we have Git, Virtualenv (and virtualenvwrapper) and RVM installed. Vim --- This the core of everything. I use quite a few plugins: - [Autoclose](https://github.com/andrewle/vim-autoclose): Inserts matching bracket, paren, brace or quote - [Colour Sampler Pack](https://github.com/vim-scripts/Colour-Sampler-Pack): Gives me a nice colour scheme - [Gundo](https://github.com/sjl/gundo.vim): Visualise the undo tree - [Lusty](https://github.com/sjbach/lusty): Manage files within Vim - [PEP-8](https://github.com/cburroughs/pep8): Validate the style of Python files - [PyDoc](https://github.com/vim-scripts/pydoc.vim): Python documentation view- and search-tool (uses pydoc) - [Pathogen](https://github.com/tpope/vim-pathogen): Plugin Manager - [Scroll Colours](https://github.com/vim-scripts/ScrollColors): Colorsheme Scroller, Chooser, and Browser - [Supertab](https://github.com/ervandew/supertab): Tab completion - [VirtualEnv](https://github.com/jmcantrell/vim-virtualenv): Works with Virtualenvs - [Vim Puppet](https://github.com/rodjek/vim-puppet): Puppet niceties - [Tabular](https://github.com/godlygeek/tabular): Text filtering and alignment - [Markdown](https://github.com/hallison/vim-markdown): Markdown syntax highlighter with snippets support I keep all this under Git control (available [here](https://gitlab.chriscowley.me.uk/chriscowleyunix/vim-configuration)). You can just clone my repo and create a symlink for your `.vimrc`. If you would rather see what you are doing, then you can replicate my set up like this: mkdir -p ${HOME}/.vim/{autoload,bundle} cd ${HOME}/.vim/ git init git submodule add https://github.com/andrewle/vim-autoclose.git bundle/vim-autoclose git submodule add https://github.com/vim-scripts/Colour-Sampler-Pack.git bundle/colour-sampler-pack git submodule add https://github.com/sjl/gundo.vim.git bundle/gundo git submodule add https://github.com/sjbach/lusty.git bundle/lusty git submodule add https://github.com/cburroughs/pep8.git bundle/pep8 git submodule add https://github.com/vim-scripts/pydoc.vim.git bundle/pydoc git submodule add https://github.com/tpope/vim-pathogen.git bundle/pathogen git submodule add https://github.com/vim-scripts/ScrollColors.git bundle/scrollColors git submodule add https://github.com/ervandew/supertab.git bundle/supertab git submodule add https://github.com/jmcantrell/vim-virtualenv.git bundle/vim-virtualenv git submodule add https://github.com/rodjek/vim-puppet.git bundle/puppet git submodule add https://github.com/godlygeek/tabular.git bundle/tabular git submodule add https://github.com/hallison/vim-markdown.git bundle/markdown git submodule init git submodule update git submodule foreach git submodule init git submodule foreach git submodule update ln -s ../bundle/pathogen/autoload/pathogen.vim autoload/pathogen.vim mv $HOME/.vimrc . ln -s '$HOME/.vim/.vimrc' $HOME/.vimrc Add the following to your `.vimrc`: " pathogen let g:pathogen_disabled = [ 'pathogen' ] " don't load self call pathogen#infect() " load everyhting else call pathogen#helptags() " load plugin help files " code folding set foldmethod=indent set foldlevel=2 set foldnestmax=4 " indentation set autoindent set softtabstop=4 shiftwidth=4 expandtab " visual highlight Normal ctermbg=black set background=dark set cursorline set t_Co=256 " syntax highlighting syntax on filetype on " enables filetype detection filetype plugin indent on " enables filetype specific plugins " colorpack colorscheme vibrantink " gundo nnoremap :GundoToggle " lusty set hidden let g:LustyJugglerSuppressRubyWarning = 1" " pep8 let g:pep8_map='8' " supertab au FileType python set omnifunc=pythoncomplete#Complete let g:SuperTabDefaultCompletionType = "context" set completeopt=menuone,longest,preview There's quite a lot going on there. Refer to the various plugin docs linked above to find what it all does. This would be a good moment to commit all that. git add . git commit -m "Initial commit" Tmux ---- I use this so I can have a single console window, with multiple panes. Tmux is configured with the file `$HOME/.tmux.conf`, mine contains: set-window-option -g mode-keys vi bind h select-pane -L bind j select-pane -D bind k select-pane -U bind l select-pane -R unbind -n C-b set -g prefix C-a # easy-to-remember split pane commands bind h split-window -h bind v split-window -v unbind '"' unbind % bind -n M-Left select-pane -L bind -n M-Right select-pane -R bind -n M-Up select-pane -U bind -n M-Down select-pane -D set-window-option -g window-status-current-bg yellow # Just click it set-option -g mouse-select-pane on set-option -g mouse-select-window on set-option -g mouse-resize-pane on # Scroll your way into copy mode (scrollback buffer) # and select text for copying with the mouse setw -g mode-mouse on set -g set-titles on set -g set-titles-string "#T" Now I can use `Ctrl+a` instead of `Ctrl+b`. You may not need to do this, but I have little hands.I also change the kes for splitting my windows (*'h'* horizontally, *v* vertically). I make a few changes from the defaults: - `Ctrl+a` instead of `Ctrl+b` is my prefix. This matches `screen`, plusI am more comfortable as I have small hands. - I can move around panes with either `vi` keys, arrows or just with the mouse. - I change the keys to split windows to `h` (horizontal) and `v` (vertical). This all works pretty well for me, although not perfectly. At the moment my clipboard gets intercepted by Tmux,which is top of my my list to fix.