diff options
authorTom Ryder <tom@sanctum.geek.nz>2017-11-12 20:57:13 +1300
committerTom Ryder <tom@sanctum.geek.nz>2017-11-12 20:57:13 +1300
commit937458202c8311ecbed7a51a4cec1d1941a6bfd0 (patch)
parent871806685c2fcf26b81f3b324741d346ab365802 (diff)
Bind norm J on fixed_join.vim load if appropriate
If there are no mappings to the <Plug>FixedJoin target that the fixed_join.vim plugin provides at the time it is loaded, and the line-joining function of normal-mode J is not already mapped, the plugin will try to map it itself, for a more plug-and-play.
3 files changed, 12 insertions, 10 deletions
diff --git a/vim/config/whitespace.vim b/vim/config/whitespace.vim
index 12d41a4e..981def81 100644
--- a/vim/config/whitespace.vim
+++ b/vim/config/whitespace.vim
@@ -24,12 +24,5 @@ set shiftround
" despite the noble Steve Losh's exhortations
set nojoinspaces
-" Rebind normal J to run plugin-defined join that doesn't jump around, but
-" only if we have the eval feature, because otherwise this mapping won't exist
-" and we should keep the default behaviour
-if has('eval')
- nmap J <Plug>FixedJoin
" \x strips trailing whitespace via a custom plugin
nmap <Leader>x <Plug>StripTrailingWhitespace
diff --git a/vim/doc/fixed_join.txt b/vim/doc/fixed_join.txt
index df0df251..834a3569 100644
--- a/vim/doc/fixed_join.txt
+++ b/vim/doc/fixed_join.txt
@@ -4,10 +4,13 @@ Author: Tom Ryder <tom@sanctum.geek.nz>
License: Same terms as Vim itself (see |license|)
This plugin provides a mapping target <Plug>FixedJoin to create a binding for a
-user to join lines in normal mode without the cursor jumping around.
+user to join lines in normal mode without the cursor jumping around. If the
+user's configuration does not specify a mapping to this target by the time this
+plugin is loaded, it will attempt to map 'J' in normal mode to simply replace
+the default functionality.
-If also provides a :FixedJoin command if you have +user_commands, but this is
-not required.
+The plugin also provides a :FixedJoin command if you have +user_commands, but
+this is not required.
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
diff --git a/vim/plugin/fixed_join.vim b/vim/plugin/fixed_join.vim
index 83977c2f..2e7f2abd 100644
--- a/vim/plugin/fixed_join.vim
+++ b/vim/plugin/fixed_join.vim
@@ -31,6 +31,12 @@ noremap <silent> <unique>
\ <Plug>FixedJoin
\ :<C-U>call <SID>FixedJoin()<CR>
+" If there's no mapping to it already, try to bind normal-mode J to it, to
+" simply replace the old functionality
+nmap <unique>
+ \ J
+ \ <Plug>FixedJoin
" Create a command as well in case it's useful
if has('user_commands')
command -nargs=0