1
0
Fork 0
mirror of synced 2024-11-18 23:05:34 -05:00

Added vim-zenroom: Remove all clutter and focus only on the essential. Similar to iA Writer or Write Room

This commit is contained in:
amix 2013-12-28 21:17:09 +00:00
parent 08a64d943d
commit 6bce69df95
8 changed files with 491 additions and 1 deletions

View file

@ -74,6 +74,8 @@ I recommend reading the docs of these plugins to understand them better. Each of
* [vim-expand-region](https://github.com/terryma/vim-expand-region): Allows you to visually select increasingly larger regions of text using the same key combination.
* [vim-airline](https://github.com/bling/vim-airline): Lean & mean status/tabline for vim that's light as air (replacing powerline)
* [vim-fugitive](https://github.com/tpope/vim-fugitive): A Git wrapper so awesome, it should be illegal
* [vim-zenroom](https://github.com/amix/vim-zenroom):
Remove all clutter and focus only on the essential. Similar to iA Writer or Write Room [Read more here](http://amix.dk/blog/post/19744#zenroom-for-Vim-Focsuing-only-on-the-essential)
## What color schemes are included?
@ -311,3 +313,5 @@ Vimscript mappings:
* [Vim 7.3: Persistent undo and encryption!](http://amix.dk/blog/post/19548#Vim-7-3-Persistent-undo-and-encryption)
* [Vim tips: Visual Search](http://amix.dk/blog/post/19334#Vim-tips-Visual-Search)
* [Folding in Vim](http://amix.dk/blog/post/19132#Folding-in-Vim)
* [
Zen room for Vim: Focsuing only on the essential](http://amix.dk/blog/post/19744#zenroom-for-Vim-Focsuing-only-on-the-essential)

View file

@ -0,0 +1,12 @@
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.

View file

@ -0,0 +1,20 @@
This is my fork of Vimroom which includes following:
* A special mode for editing Markdown and reStructuredText. It's highly inspired by [iA Writer](http://writer.pro/)
* Optimizations for [my vimrc](https://github.com/amix/vimrc)
Pelase read more here [
zenroom for Vim: Focsuing only on the essential](http://amix.dk/blog/post/19744#zenroom-for-Vim-Focsuing-only-on-the-essential).
## Editing code
![Screenshot 1](http://amix.dk/uploads/zenroom_code.jpg)
![Screenshot 2](http://amix.dk/uploads/zenroom_code_1.jpg)
## Updating documentation
![Screenshot 3](http://amix.dk/uploads/zenroom_documentation.jpg)
![Screenshot 4](http://amix.dk/uploads/zenroom_documentation_1.jpg)

View file

@ -0,0 +1,12 @@
g:vimroom_background vimroom.txt /*g:vimroom_background*
g:vimroom_min_sidebar_width vimroom.txt /*g:vimroom_min_sidebar_width*
g:vimroom_navigational_keys vimroom.txt /*g:vimroom_navigational_keys*
g:vimroom_scrolloff vimroom.txt /*g:vimroom_scrolloff*
g:vimroom_sidebar_height vimroom.txt /*g:vimroom_sidebar_height*
g:vimroom_width vimroom.txt /*g:vimroom_width*
vimroom vimroom.txt /*vimroom*
vimroom-about vimroom.txt /*vimroom-about*
vimroom-configuration vimroom.txt /*vimroom-configuration*
vimroom-installation vimroom.txt /*vimroom-installation*
vimroom-toc vimroom.txt /*vimroom-toc*
vimroom.txt vimroom.txt /*vimroom.txt*

View file

@ -0,0 +1,86 @@
*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 Im 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 Id much prefer it to
be centered. Id also like a little of the visual clutter to fade away. Some
of this is possible with MacVim, but Id 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 Popes Pathogen. Using
that plugin, you can simply clone the VimRoom repository into your bundles
directory, and youre done.
Without Pathogen, installation is almost as trivial: simply copy
./plugins/vimroom.vim from the repository into your plugins directory. Thats
it!
==============================================================================
CONFIGURATION *vimroom-configuration*
By default, VimRoom binds <Leader>V to <Plug>VimroomToggle, and sets up an 80
column workspace with at least 5 columns of space on either side (it doesnt
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
terminals 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 <Up>, <Down>, j, and k to
navigate over “display” lines, rather than “logical” lines. This defaults to
p1 (on), if youd 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 dont want vertical
padding, set this to 0.
*g:vimroom_width*
is the width of your workspace.
You can bind the <Plug>VimroomToggle function to any key combination you like
via the usual mechanisms. For example::
>
nnoremap <silent> <Leader>mz <Plug>VimroomToggle
<>
Would bind the function to <Leader>mz. Trivial, right?
And thats it!
==============================================================================
vim:tw=78:ts=2:sw=2:expandtab:ft=help:norl:

View file

@ -0,0 +1,355 @@
"==============================================================================
"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 <mike@mikewest.org>
"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 100:
if !exists( "g:vimroom_width" )
let g:vimroom_width = 100
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 = 2
endif
" The GUI background color. Defaults to "black"
if !exists( "g:vimroom_guibackground" )
let g:vimroom_guibackground = "#202020"
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 = 0
endif
" Should Vimroom map navigational keys (`<Up>`, `<Down>`, `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 `background` value for reset later
let s:save_background = ""
if exists( "&background" )
let s:save_background = &background
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 `showtabline` value for reset later
let s:save_showtabline = ""
if exists( "&showtabline" )
let s:save_showtabline = &showtabline
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! s:markdown_room()
set background=light
set linespace=8
set textwidth=80
hi Normal guibg=gray95
hi NonText guifg=gray95
hi FoldColumn guibg=gray95
hi CursorLine guibg=gray90
hi Title gui=bold guifg=gray25
hi MarkdownHeadingDelimiter gui=bold guifg=gray25
hi htmlSpecialChar guifg=black
hi markdownError guifg=black
hi markdownBold gui=bold guifg=gray25
hi markdownItalic guifg=gray25 gui=underline
hi markdownUrl guifg=#2fb3a6
hi markdownAutomaticLink guifg=#2fb3a6
hi markdownLinkText guifg=#317849
hi markdownUrlTitle guifg=#317849
hi markdownBlockquote guifg=#317849 gui=bold
hi markdownId guifg=#2fb3a6
hi markdownIdDeclaration guifg=#317849 gui=bold
hi markdownListMarker guifg=#317849
hi Cursor guibg=#15abdd
if has('gui_running')
let l:highlightbgcolor = "guibg=#f2f2f2"
let l:highlightfgbgcolor = "guifg=#f2f2f2" . " " . 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 )
endfunction
function! <SID>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_showtabline != ""
exec( "set showtabline=" . s:save_showtabline )
endif
exec( "set linespace=0" )
if s:save_background != ""
exec( "set background=" . s:save_background )
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
" Enable AirLine
exec("silent AirlineToggle")
exec("silent AirlineRefresh")
else
if s:is_the_screen_wide_enough()
let is_mark_or_rst = &filetype == "markdown" || &filetype == "rst" || &filetype == "text"
if is_mark_or_rst
call s:markdown_room()
endif
" Disable AirLine
exec("silent AirlineToggle")
let s:active = 1
let s:sidebar = s:sidebar_size()
" Turn off status bar
if s:save_laststatus != ""
setlocal laststatus=0
endif
" Turn off tabline
if s:save_showtabline != ""
setlocal showtabline=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
exec( "silent vertical resize " . g:vimroom_width )
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 <unique> <silent> <Up> g<Up>
noremap <unique> <silent> <Down> g<Down>
noremap <unique> <silent> k gk
noremap <unique> <silent> j gj
inoremap <unique> <silent> <Up> <C-o>g<Up>
inoremap <unique> <silent> <Down> <C-o>g<Down>
catch /E227:/
echo "Navigational key mappings already exist."
endtry
endif
" Hide distracting visual elements
if !is_mark_or_rst
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 )
endif
set t_mr=""
set fillchars+=vert:\
endif
endif
endfunction
" Create a mapping for the `VimroomToggle` function
noremap <silent> <Plug>VimroomToggle :call <SID>VimroomToggle()<CR>
" Create a `VimroomToggle` command:
command -nargs=0 VimroomToggle call <SID>VimroomToggle()
" If no mapping exists, map it to `<Leader>V`.
if !hasmapto( '<Plug>VimroomToggle' )
nmap <silent> <Leader>V <Plug>VimroomToggle
endif

View file

@ -33,6 +33,7 @@ vim-expand-region https://github.com/terryma/vim-expand-region
vim-multiple-cursors https://github.com/terryma/vim-multiple-cursors
vim-fugitive https://github.com/tpope/vim-fugitive
vim-airline https://github.com/bling/vim-airline
vim-zenroom https://github.com/amix/vim-zenroom
""".strip()
GITHUB_ZIP = '%s/archive/master.zip'

View file

@ -109,4 +109,4 @@ let g:airline_theme="luna"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Vimroom
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nnoremap <silent> <leader>vv :VimroomToggle<cr>
nnoremap <silent> <leader>z :VimroomToggle<cr>