mirror of
https://github.com/vim/vim.git
synced 2025-11-09 10:37:17 -05:00
Commit d9ebd46bd0 changed the condition to
check if the clipboard is available from:
```
has('clipboard')
```
to
```
has('clipboard_working')
```
Assuming that is the more accurate test because even when clipboard
support is enabled at compile time it may not be actually working (e.g.
if no X11 environment is available, or when working on a remote server).
However it seems that condition does not evaluate to true, when the GUI
has not been started up yet (and there was no X11 Connection yet possible).
So let's just revert back the check to `has('clipboard')`, since that
has been proven to be working well enough.
related: #13809
Signed-off-by: Christian Brabandt <cb@256bit.org>
147 lines
4.0 KiB
VimL
147 lines
4.0 KiB
VimL
" Set options and add mapping such that Vim behaves a lot like MS-Windows
|
|
"
|
|
" Maintainer: The Vim Project <https://github.com/vim/vim>
|
|
" Last Change: 2024 Mar 13
|
|
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
|
|
|
|
" Bail out if this isn't wanted.
|
|
if exists("g:skip_loading_mswin") && g:skip_loading_mswin
|
|
finish
|
|
endif
|
|
|
|
" set the 'cpoptions' to its Vim default
|
|
if 1 " only do this when compiled with expression evaluation
|
|
let s:save_cpo = &cpoptions
|
|
endif
|
|
set cpo&vim
|
|
|
|
" set 'selection', 'selectmode', 'mousemodel' and 'keymodel' for MS-Windows
|
|
behave mswin
|
|
|
|
" backspace and cursor keys wrap to previous/next line
|
|
set backspace=indent,eol,start whichwrap+=<,>,[,]
|
|
|
|
" backspace in Visual mode deletes selection
|
|
vnoremap <BS> d
|
|
|
|
" the better solution would be to use has("clipboard_working"),
|
|
" but that may not be available yet while starting up, so let's just check if
|
|
" clipboard support has been compiled in and assume it will be working :/
|
|
if has("clipboard")
|
|
" CTRL-X and SHIFT-Del are Cut
|
|
vnoremap <C-X> "+x
|
|
vnoremap <S-Del> "+x
|
|
|
|
" CTRL-C and CTRL-Insert are Copy
|
|
vnoremap <C-C> "+y
|
|
vnoremap <C-Insert> "+y
|
|
|
|
" CTRL-V and SHIFT-Insert are Paste
|
|
map <C-V> "+gP
|
|
map <S-Insert> "+gP
|
|
|
|
cmap <C-V> <C-R>+
|
|
cmap <S-Insert> <C-R>+
|
|
else
|
|
" Use the unnamed register when clipboard support not available
|
|
|
|
" CTRL-X and SHIFT-Del are Cut
|
|
vnoremap <C-X> x
|
|
vnoremap <S-Del> x
|
|
|
|
" CTRL-C and CTRL-Insert are Copy
|
|
vnoremap <C-C> y
|
|
vnoremap <C-Insert> y
|
|
|
|
" CTRL-V and SHIFT-Insert are Paste
|
|
noremap <C-V> gP
|
|
noremap <S-Insert> gP
|
|
|
|
inoremap <C-V> <C-R>"
|
|
inoremap <S-Insert> <C-R>"
|
|
endif
|
|
|
|
" Pasting blockwise and linewise selections is not possible in Insert and
|
|
" Visual mode without the +virtualedit feature. They are pasted as if they
|
|
" were characterwise instead.
|
|
" Uses the paste.vim autoload script.
|
|
" Use CTRL-G u to have CTRL-Z only undo the paste.
|
|
|
|
if has("clipboard_working")
|
|
exe 'inoremap <script> <C-V> <C-G>u' . paste#paste_cmd['i']
|
|
exe 'vnoremap <script> <C-V> ' . paste#paste_cmd['v']
|
|
endif
|
|
|
|
imap <S-Insert> <C-V>
|
|
vmap <S-Insert> <C-V>
|
|
|
|
" Use CTRL-Q to do what CTRL-V used to do
|
|
noremap <C-Q> <C-V>
|
|
|
|
" Use CTRL-S for saving, also in Insert mode (<C-O> doesn't work well when
|
|
" using completions).
|
|
noremap <C-S> :update<CR>
|
|
vnoremap <C-S> <C-C>:update<CR>
|
|
inoremap <C-S> <Esc>:update<CR>gi
|
|
|
|
" For CTRL-V to work autoselect must be off.
|
|
" On Unix we have two selections, autoselect can be used.
|
|
if !has("unix")
|
|
set guioptions-=a
|
|
endif
|
|
|
|
" CTRL-Z is Undo; not in cmdline though
|
|
noremap <C-Z> u
|
|
inoremap <C-Z> <C-O>u
|
|
|
|
" CTRL-Y is Redo (although not repeat); not in cmdline though
|
|
noremap <C-Y> <C-R>
|
|
inoremap <C-Y> <C-O><C-R>
|
|
|
|
" Alt-Space is System menu
|
|
if has("gui")
|
|
noremap <M-Space> :simalt ~<CR>
|
|
inoremap <M-Space> <C-O>:simalt ~<CR>
|
|
cnoremap <M-Space> <C-C>:simalt ~<CR>
|
|
endif
|
|
|
|
" CTRL-A is Select all
|
|
noremap <C-A> gggH<C-O>G
|
|
inoremap <C-A> <C-O>gg<C-O>gH<C-O>G
|
|
cnoremap <C-A> <C-C>gggH<C-O>G
|
|
onoremap <C-A> <C-C>gggH<C-O>G
|
|
snoremap <C-A> <C-C>gggH<C-O>G
|
|
xnoremap <C-A> <C-C>ggVG
|
|
|
|
" CTRL-Tab is Next window
|
|
noremap <C-Tab> <C-W>w
|
|
inoremap <C-Tab> <C-O><C-W>w
|
|
cnoremap <C-Tab> <C-C><C-W>w
|
|
onoremap <C-Tab> <C-C><C-W>w
|
|
|
|
" CTRL-F4 is Close window
|
|
noremap <C-F4> <C-W>c
|
|
inoremap <C-F4> <C-O><C-W>c
|
|
cnoremap <C-F4> <C-C><C-W>c
|
|
onoremap <C-F4> <C-C><C-W>c
|
|
|
|
if has("gui")
|
|
" CTRL-F is the search dialog
|
|
noremap <expr> <C-F> has("gui_running") ? ":promptfind\<CR>" : "/"
|
|
inoremap <expr> <C-F> has("gui_running") ? "\<C-\>\<C-O>:promptfind\<CR>" : "\<C-\>\<C-O>/"
|
|
cnoremap <expr> <C-F> has("gui_running") ? "\<C-\>\<C-C>:promptfind\<CR>" : "\<C-\>\<C-O>/"
|
|
|
|
" CTRL-H is the replace dialog,
|
|
" but in console, it might be backspace, so don't map it there
|
|
nnoremap <expr> <C-H> has("gui_running") ? ":promptrepl\<CR>" : "\<C-H>"
|
|
inoremap <expr> <C-H> has("gui_running") ? "\<C-\>\<C-O>:promptrepl\<CR>" : "\<C-H>"
|
|
cnoremap <expr> <C-H> has("gui_running") ? "\<C-\>\<C-C>:promptrepl\<CR>" : "\<C-H>"
|
|
endif
|
|
|
|
" restore 'cpoptions'
|
|
set cpo&
|
|
if 1
|
|
let &cpoptions = s:save_cpo
|
|
unlet s:save_cpo
|
|
endif
|