Яка команда (або ярлик) для переміщення рядка вгору чи вниз у vim? Мій поточний робочий процес полягає в тому, щоб витягнути (скопіювати) рядок і видалити цей рядок, а потім поставити (вставити) цей рядок.
Яка команда (або ярлик) для переміщення рядка вгору чи вниз у vim? Мій поточний робочий процес полягає в тому, щоб витягнути (скопіювати) рядок і видалити цей рядок, а потім поставити (вставити) цей рядок.
Відповіді:
По-перше, вам не потрібно вибивати та видаляти; останній також помістить видалений вміст у реєстр (за замовчуванням або вказаний). Тому ddp
/ ddkP
є загальними командами для переміщення рядка вниз / вгору.
Крім того, ви можете використовувати :move
команду, тобто :move +1
/ :move -2
; це не обмежує регістр, і ви також можете переміщувати цілі діапазони. Ви можете легко визначити ключові відображення, щоб скоротити це.
Якщо ви не заперечуєте плагінів (і додатковий комфорт , який часто приходить з ними), і Тім тата незачепленим плагін і мій плагін LineJuggler забезпечують ]e
/ [e
відображення для переміщення рядків (і ще кілька, Тім для різних цілей, мою увагу на обробці рядок (и)).
Найпростіший: :m+
або :m-2
абревіатура, :move
як запропонував Інго.
Або використовуючи візуальний режим ( V), вирізавши лінію ( d/ x), потім вставити її ( p- нижче курсору, Pнад курсором) після того, як ви перемістили курсор у потрібне місце перед вставкою (так, підсумовуючи, це Vxp/ Vdp).
Під час переміщення декількох рядків у візуальному режимі вам потрібно використовувати :m '>+1
(для переміщення однією лінією вниз) або :m '<-2
(для переміщення однієї лінії вгору).
Ось приклад корисного відображення ( Shift+ ↑/ Shift+↓):
nnoremap <S-Up> :m-2<CR>
nnoremap <S-Down> :m+<CR>
inoremap <S-Up> <Esc>:m-2<CR>
inoremap <S-Down> <Esc>:m+<CR>
який схожий на Sublime Text ( Win / OSX ).
Ось кілька пропозицій на vim wikia :
nnoremap <A-j> :m .+1<CR>==
nnoremap <A-k> :m .-2<CR>==
inoremap <A-j> <Esc>:m .+1<CR>==gi
inoremap <A-k> <Esc>:m .-2<CR>==gi
vnoremap <A-j> :m '>+1<CR>gv=gv
vnoremap <A-k> :m '<-2<CR>gv=gv
У звичайному режимі або в режимі вставки натисніть Alt-j для переміщення поточної лінії вниз або натисніть Alt-k для переміщення поточної лінії вгору.
Після візуального вибору блоку ліній (наприклад, натисканням V, а потім переміщенням курсору вниз), натисніть Alt-j, щоб перемістити весь блок вниз, або натисніть Alt-k, щоб перемістити блок вгору.
Дивитися також:
Якщо я хочу поміняти один рядок на рядок вище, зазвичай роблю наступне
ddkP
Пояснення
ddp
FWIW, ось чим я користувався роками. Він переміщує поточну лінію вгору і вниз у звичайному режимі або виділення у візуальному режимі, одночасно коригуючи відступ автоматично.
nnoremap ,<Up> :<C-u>silent! move-2<CR>==
nnoremap ,<Down> :<C-u>silent! move+<CR>==
xnoremap ,<Up> :<C-u>silent! '<,'>move-2<CR>gv=gv
xnoremap ,<Down> :<C-u>silent! '<,'>move'>+<CR>gv=gv
ddkP
, рухаючись вниз простіше:ddp
.