Repository: mikewest/vimroom Branch: master Commit: b9d1fa7d460d Files: 4 Total size: 14.3 KB Directory structure: gitextract_3k0xgk98/ ├── LICENSE.markdown ├── README.markdown ├── doc/ │ └── vimroom.txt └── plugin/ └── vimroom.vim ================================================ FILE CONTENTS ================================================ ================================================ FILE: LICENSE.markdown ================================================ Copyright (c) 2010 Mike West, http://mikewest.org/ All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the software nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: README.markdown ================================================ Vimroom ======= Readme goes here. ================================================ FILE: doc/vimroom.txt ================================================ *vimroom.txt* ============================================================================== TABLE OF CONTENTS *vimroom* *vimroom-toc* 1. About |vimroom-about| 2. Installation |vimroom-installation| 3. Configuration |vimroom-configuration| ============================================================================== ABOUT *vimroom-about* I do most of my writing in Vim, because I’m a big nerd. It does most of what I want a writing environment to do, but I miss some of the “distraction free" features of the quite exceptional WriteRoom. Fullscreening Vim means that text ends up flat up against the left side of my monitor, but I’d much prefer it to be centered. I’d also like a little of the visual clutter to fade away. Some of this is possible with MacVim, but I’d rather do as much as possible in a platform-independent way. So, command-line Vim it is. For more visit: http://projects.mikewest.org/vimroom/ https://github.com/mikewest/vimroom ============================================================================== INSTALLATION *vimroom-installation* I think the best way to install Vim plugins is via Tim Pope’s Pathogen. Using that plugin, you can simply clone the VimRoom repository into your bundles directory, and you’re done. Without Pathogen, installation is almost as trivial: simply copy ./plugins/vimroom.vim from the repository into your plugins directory. That’s it! ============================================================================== CONFIGURATION *vimroom-configuration* By default, VimRoom binds V to VimroomToggle, and sets up an 80 column workspace with at least 5 columns of space on either side (it doesn’t help at all to have single-column sidebars, you see), and 3 lines of space above and below. It assumes a black background when hiding visual distractions. As of v0.4, VimRoom also sets up a :VimroomToggle command that has the same effect. Changing any of these assumptions is a simple matter of setting variables in your .vimrc. *g:vimroom_background* is the background color to be used for hiding elements. Set this to your terminal’s background color (“white”, “black”, etc.) *g:vimroom_min_sidebar_width* is the minimum sidebar width. This will automatically expand to take up all the free space left after setting the main workspace window to g:vimroom_width pcolumns. *g:vimroom_navigational_keys* determines whether Vimroom will map keys like , , j, and k to navigate over “display” lines, rather than “logical” lines. This defaults to p1 (on), if you’d prefer the mapping not take place, set it to 0 (off). *g:vimroom_scrolloff* specifies how many lines of text ought appear before and after the cursor. pThis defaults to 999, which centers the cursor on the screen. *g:vimroom_sidebar_height* sets the height of the upper and lower “sidebars.” If you don’t want vertical padding, set this to 0. *g:vimroom_width* is the width of your workspace. You can bind the VimroomToggle function to any key combination you like via the usual mechanisms. For example:: > nnoremap mz VimroomToggle <> Would bind the function to mz. Trivial, right? And that’s it! ============================================================================== vim:tw=78:ts=2:sw=2:expandtab:ft=help:norl: ================================================ FILE: plugin/vimroom.vim ================================================ "============================================================================== "File: vimroom.vim "Description: Vaguely emulates a writeroom-like environment in Vim by " splitting the current window in such a way as to center a column " of user-specified width, wrap the text, and break lines. "Maintainer: Mike West "Version: 0.7 "Last Change: 2010-10-31 "License: BSD <../LICENSE.markdown> "============================================================================== """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Plugin Configuration " " The typical start to any vim plugin: If the plugin has already been loaded, " exit as quickly as possible. if exists( "g:loaded_vimroom_plugin" ) finish endif let g:loaded_vimroom_plugin = 1 " The desired column width. Defaults to 80: if !exists( "g:vimroom_width" ) let g:vimroom_width = 80 endif " The minimum sidebar size. Defaults to 5: if !exists( "g:vimroom_min_sidebar_width" ) let g:vimroom_min_sidebar_width = 5 endif " The sidebar height. Defaults to 3: if !exists( "g:vimroom_sidebar_height" ) let g:vimroom_sidebar_height = 3 endif " The GUI background color. Defaults to "black" if !exists( "g:vimroom_guibackground" ) let g:vimroom_guibackground = "black" endif " The cterm background color. Defaults to "bg" if !exists( "g:vimroom_ctermbackground" ) let g:vimroom_ctermbackground = "bg" endif " The "scrolloff" value: how many lines should be kept visible above and below " the cursor at all times? Defaults to 999 (which centers your cursor in the " active window). if !exists( "g:vimroom_scrolloff" ) let g:vimroom_scrolloff = 999 endif " Should Vimroom map navigational keys (``, ``, `j`, `k`) to navigate " "display" lines instead of "logical" lines (which makes it much simpler to deal " with wrapped lines). Defaults to `1` (on). Set to `0` if you'd prefer not to " run the mappings. if !exists( "g:vimroom_navigation_keys" ) let g:vimroom_navigation_keys = 1 endif " Should Vimroom clear line numbers from the Vimroomed buffer? Defaults to `1` " (on). Set to `0` if you'd prefer Vimroom to leave line numbers untouched. " (Note that setting this to `0` will not turn line numbers on if they aren't " on already). if !exists( "g:vimroom_clear_line_numbers" ) let g:vimroom_clear_line_numbers = 1 endif """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Plugin Code " " Given the desired column width, and minimum sidebar width, determine " the minimum window width necessary for splitting to make sense let s:minwidth = g:vimroom_width + ( g:vimroom_min_sidebar_width * 2 ) " Save the current color scheme for reset later let s:scheme = "" if exists( "g:colors_name" ) let s:scheme = g:colors_name endif if exists( "&t_mr" ) let s:save_t_mr = &t_mr end " Save the current scrolloff value for reset later let s:save_scrolloff = "" if exists( "&scrolloff" ) let s:save_scrolloff = &scrolloff end " Save the current `laststatus` value for reset later let s:save_laststatus = "" if exists( "&laststatus" ) let s:save_laststatus = &laststatus endif " Save the current `textwidth` value for reset later let s:save_textwidth = "" if exists( "&textwidth" ) let s:save_textwidth = &textwidth endif " Save the current `number` and `relativenumber` values for reset later let s:save_number = 0 let s:save_relativenumber = 0 if exists( "&number" ) let s:save_number = &number endif if exists ( "&relativenumber" ) let s:save_relativenumber = &relativenumber endif " We're currently in nonvimroomized state let s:active = 0 function! s:is_the_screen_wide_enough() return winwidth( winnr() ) >= s:minwidth endfunction function! s:sidebar_size() return ( winwidth( winnr() ) - g:vimroom_width - 2 ) / 2 endfunction function! VimroomToggle() if s:active == 1 let s:active = 0 " Close all other split windows if g:vimroom_sidebar_height wincmd j close wincmd k close endif if g:vimroom_min_sidebar_width wincmd l close wincmd h close endif " Reset color scheme (or clear new colors, if no scheme is set) if s:scheme != "" exec( "colorscheme " . s:scheme ) else hi clear endif if s:save_t_mr != "" exec( "set t_mr=" .s:save_t_mr ) endif " Reset `scrolloff` and `laststatus` if s:save_scrolloff != "" exec( "set scrolloff=" . s:save_scrolloff ) endif if s:save_laststatus != "" exec( "set laststatus=" . s:save_laststatus ) endif if s:save_textwidth != "" exec( "set textwidth=" . s:save_textwidth ) endif if s:save_number != 0 set number endif if s:save_relativenumber != 0 set relativenumber endif " Remove wrapping and linebreaks set nowrap set nolinebreak else if s:is_the_screen_wide_enough() let s:active = 1 let s:sidebar = s:sidebar_size() " Turn off status bar if s:save_laststatus != "" setlocal laststatus=0 endif if g:vimroom_min_sidebar_width " Create the left sidebar exec( "silent leftabove " . s:sidebar . "vsplit new" ) setlocal noma setlocal nocursorline setlocal nonumber silent! setlocal norelativenumber wincmd l " Create the right sidebar exec( "silent rightbelow " . s:sidebar . "vsplit new" ) setlocal noma setlocal nocursorline setlocal nonumber silent! setlocal norelativenumber wincmd h endif if g:vimroom_sidebar_height " Create the top sidebar exec( "silent leftabove " . g:vimroom_sidebar_height . "split new" ) setlocal noma setlocal nocursorline setlocal nonumber silent! setlocal norelativenumber wincmd j " Create the bottom sidebar exec( "silent rightbelow " . g:vimroom_sidebar_height . "split new" ) setlocal noma setlocal nocursorline setlocal nonumber silent! setlocal norelativenumber wincmd k endif " Setup wrapping, line breaking, and push the cursor down set wrap set linebreak if g:vimroom_clear_line_numbers set nonumber silent! set norelativenumber endif if s:save_textwidth != "" exec( "set textwidth=".g:vimroom_width ) endif if s:save_scrolloff != "" exec( "set scrolloff=".g:vimroom_scrolloff ) endif " Setup navigation over "display lines", not "logical lines" if " mappings for the navigation keys don't already exist. if g:vimroom_navigation_keys try noremap g noremap g noremap k gk noremap j gj inoremap g inoremap g catch /E227:/ echo "Navigational key mappings already exist." endtry endif " Hide distracting visual elements if has('gui_running') let l:highlightbgcolor = "guibg=" . g:vimroom_guibackground let l:highlightfgbgcolor = "guifg=" . g:vimroom_guibackground . " " . l:highlightbgcolor else let l:highlightbgcolor = "ctermbg=" . g:vimroom_ctermbackground let l:highlightfgbgcolor = "ctermfg=" . g:vimroom_ctermbackground . " " . l:highlightbgcolor endif exec( "hi Normal " . l:highlightbgcolor ) exec( "hi VertSplit " . l:highlightfgbgcolor ) exec( "hi NonText " . l:highlightfgbgcolor ) exec( "hi StatusLine " . l:highlightfgbgcolor ) exec( "hi StatusLineNC " . l:highlightfgbgcolor ) set t_mr="" set fillchars+=vert:\ endif endif endfunction " Create a mapping for the `VimroomToggle` function noremap VimroomToggle :call VimroomToggle() " Create a `VimroomToggle` command: command -nargs=0 VimroomToggle call VimroomToggle() " If no mapping exists, map it to `V`. if !hasmapto( 'VimroomToggle' ) nmap V VimroomToggle endif