xref: /vim-8.2.3635/runtime/mswin.vim (revision d47d5223)
1071d4279SBram Moolenaar" Set options and add mapping such that Vim behaves a lot like MS-Windows
2071d4279SBram Moolenaar"
3071d4279SBram Moolenaar" Maintainer:	Bram Moolenaar <[email protected]>
4*d47d5223SBram Moolenaar" Last Change:	2018 Dec 07
5269ec658SBram Moolenaar
6*d47d5223SBram Moolenaar" Bail out if this isn't wanted.
7269ec658SBram Moolenaarif exists("g:skip_loading_mswin") && g:skip_loading_mswin
8269ec658SBram Moolenaar  finish
9269ec658SBram Moolenaarendif
10071d4279SBram Moolenaar
11071d4279SBram Moolenaar" set the 'cpoptions' to its Vim default
12071d4279SBram Moolenaarif 1	" only do this when compiled with expression evaluation
13071d4279SBram Moolenaar  let s:save_cpo = &cpoptions
14071d4279SBram Moolenaarendif
15071d4279SBram Moolenaarset cpo&vim
16071d4279SBram Moolenaar
17071d4279SBram Moolenaar" set 'selection', 'selectmode', 'mousemodel' and 'keymodel' for MS-Windows
18071d4279SBram Moolenaarbehave mswin
19071d4279SBram Moolenaar
20071d4279SBram Moolenaar" backspace and cursor keys wrap to previous/next line
21071d4279SBram Moolenaarset backspace=indent,eol,start whichwrap+=<,>,[,]
22071d4279SBram Moolenaar
23071d4279SBram Moolenaar" backspace in Visual mode deletes selection
24071d4279SBram Moolenaarvnoremap <BS> d
25071d4279SBram Moolenaar
268cc2a9c0SBram Moolenaarif has("clipboard")
27071d4279SBram Moolenaar    " CTRL-X and SHIFT-Del are Cut
28071d4279SBram Moolenaar    vnoremap <C-X> "+x
29071d4279SBram Moolenaar    vnoremap <S-Del> "+x
30071d4279SBram Moolenaar
31071d4279SBram Moolenaar    " CTRL-C and CTRL-Insert are Copy
32071d4279SBram Moolenaar    vnoremap <C-C> "+y
33071d4279SBram Moolenaar    vnoremap <C-Insert> "+y
34071d4279SBram Moolenaar
35071d4279SBram Moolenaar    " CTRL-V and SHIFT-Insert are Paste
36071d4279SBram Moolenaar    map <C-V>		"+gP
37071d4279SBram Moolenaar    map <S-Insert>		"+gP
38071d4279SBram Moolenaar
39071d4279SBram Moolenaar    cmap <C-V>		<C-R>+
40071d4279SBram Moolenaar    cmap <S-Insert>		<C-R>+
418cc2a9c0SBram Moolenaarendif
42071d4279SBram Moolenaar
43071d4279SBram Moolenaar" Pasting blockwise and linewise selections is not possible in Insert and
44071d4279SBram Moolenaar" Visual mode without the +virtualedit feature.  They are pasted as if they
45071d4279SBram Moolenaar" were characterwise instead.
461056d988SBram Moolenaar" Uses the paste.vim autoload script.
4730b65817SBram Moolenaar" Use CTRL-G u to have CTRL-Z only undo the paste.
481056d988SBram Moolenaar
498cc2a9c0SBram Moolenaarif 1
5030b65817SBram Moolenaar    exe 'inoremap <script> <C-V> <C-G>u' . paste#paste_cmd['i']
5130b65817SBram Moolenaar    exe 'vnoremap <script> <C-V> ' . paste#paste_cmd['v']
528cc2a9c0SBram Moolenaarendif
531056d988SBram Moolenaar
54071d4279SBram Moolenaarimap <S-Insert>		<C-V>
55071d4279SBram Moolenaarvmap <S-Insert>		<C-V>
56071d4279SBram Moolenaar
57071d4279SBram Moolenaar" Use CTRL-Q to do what CTRL-V used to do
58071d4279SBram Moolenaarnoremap <C-Q>		<C-V>
59071d4279SBram Moolenaar
60a9604e61SBram Moolenaar" Use CTRL-S for saving, also in Insert mode (<C-O> doesn't work well when
61a9604e61SBram Moolenaar" using completions).
62071d4279SBram Moolenaarnoremap <C-S>		:update<CR>
63071d4279SBram Moolenaarvnoremap <C-S>		<C-C>:update<CR>
64a9604e61SBram Moolenaarinoremap <C-S>		<Esc>:update<CR>gi
65071d4279SBram Moolenaar
66071d4279SBram Moolenaar" For CTRL-V to work autoselect must be off.
67071d4279SBram Moolenaar" On Unix we have two selections, autoselect can be used.
68071d4279SBram Moolenaarif !has("unix")
69071d4279SBram Moolenaar  set guioptions-=a
70071d4279SBram Moolenaarendif
71071d4279SBram Moolenaar
72071d4279SBram Moolenaar" CTRL-Z is Undo; not in cmdline though
73071d4279SBram Moolenaarnoremap <C-Z> u
74071d4279SBram Moolenaarinoremap <C-Z> <C-O>u
75071d4279SBram Moolenaar
76071d4279SBram Moolenaar" CTRL-Y is Redo (although not repeat); not in cmdline though
77071d4279SBram Moolenaarnoremap <C-Y> <C-R>
78071d4279SBram Moolenaarinoremap <C-Y> <C-O><C-R>
79071d4279SBram Moolenaar
80071d4279SBram Moolenaar" Alt-Space is System menu
81071d4279SBram Moolenaarif has("gui")
82071d4279SBram Moolenaar  noremap <M-Space> :simalt ~<CR>
83071d4279SBram Moolenaar  inoremap <M-Space> <C-O>:simalt ~<CR>
84071d4279SBram Moolenaar  cnoremap <M-Space> <C-C>:simalt ~<CR>
85071d4279SBram Moolenaarendif
86071d4279SBram Moolenaar
87071d4279SBram Moolenaar" CTRL-A is Select all
88071d4279SBram Moolenaarnoremap <C-A> gggH<C-O>G
89071d4279SBram Moolenaarinoremap <C-A> <C-O>gg<C-O>gH<C-O>G
90071d4279SBram Moolenaarcnoremap <C-A> <C-C>gggH<C-O>G
91d2cec5b0SBram Moolenaaronoremap <C-A> <C-C>gggH<C-O>G
92910f66f9SBram Moolenaarsnoremap <C-A> <C-C>gggH<C-O>G
93910f66f9SBram Moolenaarxnoremap <C-A> <C-C>ggVG
94071d4279SBram Moolenaar
95071d4279SBram Moolenaar" CTRL-Tab is Next window
96071d4279SBram Moolenaarnoremap <C-Tab> <C-W>w
97071d4279SBram Moolenaarinoremap <C-Tab> <C-O><C-W>w
98071d4279SBram Moolenaarcnoremap <C-Tab> <C-C><C-W>w
99d2cec5b0SBram Moolenaaronoremap <C-Tab> <C-C><C-W>w
100071d4279SBram Moolenaar
101071d4279SBram Moolenaar" CTRL-F4 is Close window
102071d4279SBram Moolenaarnoremap <C-F4> <C-W>c
103071d4279SBram Moolenaarinoremap <C-F4> <C-O><C-W>c
104071d4279SBram Moolenaarcnoremap <C-F4> <C-C><C-W>c
105d2cec5b0SBram Moolenaaronoremap <C-F4> <C-C><C-W>c
106071d4279SBram Moolenaar
1078cc2a9c0SBram Moolenaarif has("gui")
1088cc2a9c0SBram Moolenaar  " CTRL-F is the search dialog
109c3fdf7f8SBram Moolenaar  noremap  <expr> <C-F> has("gui_running") ? ":promptfind\<CR>" : "/"
110c3fdf7f8SBram Moolenaar  inoremap <expr> <C-F> has("gui_running") ? "\<C-\>\<C-O>:promptfind\<CR>" : "\<C-\>\<C-O>/"
111c3fdf7f8SBram Moolenaar  cnoremap <expr> <C-F> has("gui_running") ? "\<C-\>\<C-C>:promptfind\<CR>" : "\<C-\>\<C-O>/"
1128cc2a9c0SBram Moolenaar
113c3fdf7f8SBram Moolenaar  " CTRL-H is the replace dialog,
114c3fdf7f8SBram Moolenaar  " but in console, it might be backspace, so don't map it there
115c3fdf7f8SBram Moolenaar  nnoremap <expr> <C-H> has("gui_running") ? ":promptrepl\<CR>" : "\<C-H>"
116c3fdf7f8SBram Moolenaar  inoremap <expr> <C-H> has("gui_running") ? "\<C-\>\<C-O>:promptrepl\<CR>" : "\<C-H>"
117c3fdf7f8SBram Moolenaar  cnoremap <expr> <C-H> has("gui_running") ? "\<C-\>\<C-C>:promptrepl\<CR>" : "\<C-H>"
1188cc2a9c0SBram Moolenaarendif
1198cc2a9c0SBram Moolenaar
120071d4279SBram Moolenaar" restore 'cpoptions'
121071d4279SBram Moolenaarset cpo&
122071d4279SBram Moolenaarif 1
123071d4279SBram Moolenaar  let &cpoptions = s:save_cpo
124071d4279SBram Moolenaar  unlet s:save_cpo
125071d4279SBram Moolenaarendif
126