From a0cc0969ee1cc1f295bc865161432d4be467cffa Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Thu, 2 Nov 2017 14:07:33 +1300 Subject: Move Vim big file options config into plugin Created targets install-vim-doc and install-vim-plugin with accompanying subdirectories of "vim". Added a very short summary of what the plugin does to bigfile.txt. I intend to spin off at least a couple of the blocks of my Vim configuration that are starting to coalesce into distinct plugins unto themselves, and will place the files in these directories. --- Makefile | 12 +++++++++++- vim/config/bigfile.vim | 28 ---------------------------- vim/doc/bigfile.txt | 12 ++++++++++++ vim/plugin/bigfile.vim | 28 ++++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 29 deletions(-) delete mode 100644 vim/config/bigfile.vim create mode 100644 vim/doc/bigfile.txt create mode 100644 vim/plugin/bigfile.vim diff --git a/Makefile b/Makefile index 6440b805..c09541fd 100644 --- a/Makefile +++ b/Makefile @@ -474,9 +474,11 @@ install-urxvt: urxvt/ext/select install-vim: install-vim-after \ install-vim-bundle \ install-vim-config \ + install-vim-doc \ install-vim-ftdetect \ install-vim-ftplugin \ - install-vim-indent + install-vim-indent \ + install-vim-plugin install-vim-after: find vim/after -name .git -prune -o \ @@ -493,6 +495,10 @@ install-vim-config: cp -p -- vim/vimrc $(HOME)/.vimrc cp -p -- vim/config/*.vim $(HOME)/.vim/config +install-vim-doc: + mkdir -p -- $(HOME)/.vim/doc + cp -p -- vim/doc/*.txt $(HOME)/.vim/doc + install-vim-ftdetect: mkdir -p -- $(HOME)/.vim/ftdetect cp -p -- vim/ftdetect/*.vim $(HOME)/.vim/ftdetect @@ -505,6 +511,10 @@ install-vim-indent: mkdir -p -- $(HOME)/.vim/indent cp -p -- vim/indent/*.vim $(HOME)/.vim/indent +install-vim-plugin: + mkdir -p -- $(HOME)/.vim/plugin + cp -p -- vim/plugin/*.vim $(HOME)/.vim/plugin + install-vim-gui: install-vim \ install-vim-gui-config diff --git a/vim/config/bigfile.vim b/vim/config/bigfile.vim deleted file mode 100644 index 5c68b1a7..00000000 --- a/vim/config/bigfile.vim +++ /dev/null @@ -1,28 +0,0 @@ -" When opening a large file, take some measures to keep things loading quickly -if has('eval') && has('autocmd') - - " Threshold is 10 MiB - let g:big_file_size = 10 * 1024 * 1024 - - " Declare function for turning off slow options - function! s:BigFileMeasures() - let l:file = expand('') - if getfsize(l:file) > g:big_file_size - setlocal nobackup - setlocal nowritebackup - setlocal noswapfile - if has('persistent_undo') - setlocal noundofile - endif - if exists('&synmaxcol') - setlocal synmaxcol=256 - endif - endif - endfunction - - " Define autocmd for calling to check filesize - augroup dotfiles_big_file_measures - autocmd! - autocmd BufReadPre * call s:BigFileMeasures() - augroup end -endif diff --git a/vim/doc/bigfile.txt b/vim/doc/bigfile.txt new file mode 100644 index 00000000..d7e56f28 --- /dev/null +++ b/vim/doc/bigfile.txt @@ -0,0 +1,12 @@ +*bigfile.txt* Disable slow options for big files to speed things up + +Author: Tom Ryder +License: Same terms as Vim itself (see |license|) + +This plugin adds an |autocmd| hook to check the file size of an incoming +buffer, and if it's over a certain threshold, disables certain options in order +to make the file a bit easier to edit. + +This plugin lives in Tom Ryder's "dotfiles" suite, and will eventually be spun +off into a separate distribution as it solidifies and this documentation +improves. diff --git a/vim/plugin/bigfile.vim b/vim/plugin/bigfile.vim new file mode 100644 index 00000000..5c68b1a7 --- /dev/null +++ b/vim/plugin/bigfile.vim @@ -0,0 +1,28 @@ +" When opening a large file, take some measures to keep things loading quickly +if has('eval') && has('autocmd') + + " Threshold is 10 MiB + let g:big_file_size = 10 * 1024 * 1024 + + " Declare function for turning off slow options + function! s:BigFileMeasures() + let l:file = expand('') + if getfsize(l:file) > g:big_file_size + setlocal nobackup + setlocal nowritebackup + setlocal noswapfile + if has('persistent_undo') + setlocal noundofile + endif + if exists('&synmaxcol') + setlocal synmaxcol=256 + endif + endif + endfunction + + " Define autocmd for calling to check filesize + augroup dotfiles_big_file_measures + autocmd! + autocmd BufReadPre * call s:BigFileMeasures() + augroup end +endif -- cgit v1.2.3 From dc6ff333e5d537b7702d6565ac06c271c7f7e761 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Thu, 2 Nov 2017 14:12:14 +1300 Subject: Expand comment header for bigfile.vim Include some author and license metadata. --- vim/plugin/bigfile.vim | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/vim/plugin/bigfile.vim b/vim/plugin/bigfile.vim index 5c68b1a7..d1d9ca61 100644 --- a/vim/plugin/bigfile.vim +++ b/vim/plugin/bigfile.vim @@ -1,4 +1,11 @@ -" When opening a large file, take some measures to keep things loading quickly +" +" bigfile.vim: When opening a large file, take some measures to keep things +" loading quickly. +" +" Author: Tom Ryder +" Copyright: 2017 +" License: Same as Vim itself +" if has('eval') && has('autocmd') " Threshold is 10 MiB -- cgit v1.2.3 From 080a0802d95ce3d89a4cfd9dded76d11b3092e88 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Thu, 2 Nov 2017 14:13:32 +1300 Subject: Make bigfile size variable an option with default This arranges for g:big_file_size only to set itself to 10 MiB if the variable is not already set, presumably by the user in their vimrc. --- vim/plugin/bigfile.vim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vim/plugin/bigfile.vim b/vim/plugin/bigfile.vim index d1d9ca61..7f28c539 100644 --- a/vim/plugin/bigfile.vim +++ b/vim/plugin/bigfile.vim @@ -8,8 +8,10 @@ " if has('eval') && has('autocmd') - " Threshold is 10 MiB - let g:big_file_size = 10 * 1024 * 1024 + " Default threshold is 10 MiB + if !exists('g:big_file_size') + let g:big_file_size = 10 * 1024 * 1024 + endif " Declare function for turning off slow options function! s:BigFileMeasures() -- cgit v1.2.3 From 17bd794328560cf68c23db2f2a1b04526abe932b Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Thu, 2 Nov 2017 14:18:04 +1300 Subject: Rename variable and autocmd to use plugin prefix Just removing an underscore from the variable name so that g:big_file_size becomes g:bigfile_size, and remove the "dotfiles" prefix from the autocmd. --- vim/plugin/bigfile.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vim/plugin/bigfile.vim b/vim/plugin/bigfile.vim index 7f28c539..962d7153 100644 --- a/vim/plugin/bigfile.vim +++ b/vim/plugin/bigfile.vim @@ -9,14 +9,14 @@ if has('eval') && has('autocmd') " Default threshold is 10 MiB - if !exists('g:big_file_size') - let g:big_file_size = 10 * 1024 * 1024 + if !exists('g:bigfile_size') + let g:bigfile_size = 10 * 1024 * 1024 endif " Declare function for turning off slow options function! s:BigFileMeasures() let l:file = expand('') - if getfsize(l:file) > g:big_file_size + if getfsize(l:file) > g:bigfile_size setlocal nobackup setlocal nowritebackup setlocal noswapfile @@ -30,7 +30,7 @@ if has('eval') && has('autocmd') endfunction " Define autocmd for calling to check filesize - augroup dotfiles_big_file_measures + augroup bigfile_options_bufreadpre autocmd! autocmd BufReadPre * call s:BigFileMeasures() augroup end -- cgit v1.2.3 From e316ef5df7c70fb67a07886b48c95d36a4e8c984 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Thu, 2 Nov 2017 14:20:00 +1300 Subject: Refactor plugin function for dependency injection Pass the filename to check and the size limit into the function directly from the autocmd hook. Improve commenting and spacing as we go. --- vim/plugin/bigfile.vim | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/vim/plugin/bigfile.vim b/vim/plugin/bigfile.vim index 962d7153..82d1a7dd 100644 --- a/vim/plugin/bigfile.vim +++ b/vim/plugin/bigfile.vim @@ -14,24 +14,32 @@ if has('eval') && has('autocmd') endif " Declare function for turning off slow options - function! s:BigFileMeasures() - let l:file = expand('') - if getfsize(l:file) > g:bigfile_size - setlocal nobackup - setlocal nowritebackup - setlocal noswapfile - if has('persistent_undo') - setlocal noundofile - endif - if exists('&synmaxcol') - setlocal synmaxcol=256 - endif + function! s:BigFileOptions(name, size) + + " Don't do anything if the file is under the threshold + if getfsize(a:name) <= a:size + return + endif + + " Turn off backups, swap files, and undo files + setlocal nobackup + setlocal nowritebackup + setlocal noswapfile + if has('persistent_undo') + setlocal noundofile endif + + " Limit the number of columns of syntax highlighting + if exists('&synmaxcol') + setlocal synmaxcol=256 + endif + endfunction " Define autocmd for calling to check filesize augroup bigfile_options_bufreadpre autocmd! - autocmd BufReadPre * call s:BigFileMeasures() + autocmd BufReadPre * call s:BigFileOptions(expand(''), g:bigfile_size) augroup end + endif -- cgit v1.2.3 From 607a1b5a2ece6053b7849402041b06178d7d699c Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Thu, 2 Nov 2017 14:25:54 +1300 Subject: Make bigfile 'synmaxcol' setting configurable Defaults to 256 columns and only sets it if the option's value isn't already lower than that. --- vim/plugin/bigfile.vim | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/vim/plugin/bigfile.vim b/vim/plugin/bigfile.vim index 82d1a7dd..c5dee62a 100644 --- a/vim/plugin/bigfile.vim +++ b/vim/plugin/bigfile.vim @@ -13,6 +13,11 @@ if has('eval') && has('autocmd') let g:bigfile_size = 10 * 1024 * 1024 endif + " Cut 'synmaxcol' down to this or smaller for big files + if !exists('g:bigfile_size_synmaxcol') + let g:bigfile_size_synmaxcol = 256 + endif + " Declare function for turning off slow options function! s:BigFileOptions(name, size) @@ -30,8 +35,8 @@ if has('eval') && has('autocmd') endif " Limit the number of columns of syntax highlighting - if exists('&synmaxcol') - setlocal synmaxcol=256 + if exists('&synmaxcol') && &synmaxcol > g:bigfile_size_synmaxcol + execute 'setlocal synmaxcol=' . g:bigfile_size_synmaxcol endif endfunction -- cgit v1.2.3 From 7055ff62f078dad446c4192ab3d98f16ed82caeb Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Thu, 2 Nov 2017 14:26:38 +1300 Subject: Have bigfileturn local syntax off (configurably) --- vim/plugin/bigfile.vim | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/vim/plugin/bigfile.vim b/vim/plugin/bigfile.vim index c5dee62a..fece3d9b 100644 --- a/vim/plugin/bigfile.vim +++ b/vim/plugin/bigfile.vim @@ -13,6 +13,11 @@ if has('eval') && has('autocmd') let g:bigfile_size = 10 * 1024 * 1024 endif + " Default to leaving syntax highlighting off + if !exists('g:bigfile_syntax') + let g:bigfile_syntax = 0 + endif + " Cut 'synmaxcol' down to this or smaller for big files if !exists('g:bigfile_size_synmaxcol') let g:bigfile_size_synmaxcol = 256 @@ -39,6 +44,11 @@ if has('eval') && has('autocmd') execute 'setlocal synmaxcol=' . g:bigfile_size_synmaxcol endif + " Disable syntax highlighting if configured to do so + if !g:bigfile_syntax + setlocal syntax=OFF + endif + endfunction " Define autocmd for calling to check filesize -- cgit v1.2.3