如何在(n)vim中翻转光标所在位置的比特位?
Vim光标位比特翻转快捷方案
单次翻转(普通模式)
不用手动输入目标比特,直接借助Vim的表达式寄存器实现:把光标停在目标0/1上,按r,接着按Ctrl+R,输入1 - getline('.')[col('.')-1]后回车,就能自动翻转当前位。嫌步骤繁琐的话,直接在
.vimrc里配置快捷键映射:nnoremap <leader>x r<C-R>=1 - getline('.')[col('.')-1]<CR>之后在普通模式下按
<leader>x(默认leader键是\),一键完成翻转操作。批量翻转(可视模式)
如果要选中一段区域翻转所有0/1,选中目标区域后执行命令::s/[01]/\=1 - submatch(0)/g同样可以映射成快捷键简化操作:
vnoremap <leader>x :s/[01]/\=1 - submatch(0)/g<CR>
原理说明:getline('.')获取当前行文本,col('.')-1将Vim的列数(从1开始)转换为字符串索引(从0开始),通过1 - 字符值实现0和1的互转,再通过寄存器替换对应位置的字符。
内容的提问来源于stack exchange,提问作者Barrett
相关产品推荐
相关产品推荐

