Linux/BSD初心者です。
Ubuntu15.04virtualboxを利用し、ゲストマシンにFreeBSD 10.2-stableを入れて使っています。

UbuntuGNOME端末からBSDにログインし、そこから例えばcatでファイルの中身を表示させる場合、日本語であっても次のように表示されました。(エンコードはUTF8)

$ cat test.txt
あいうえお

これがviでの表示だとこうなります。

$ vi test.txt
\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a

viのバージョン情報を表示させると以下でした。

Version 2.1.2 (2012-11-02) The CSRG, University of California, Berkeley.

virtualbox付属のターミナルからBSDにログインして同じことをすると、catの日本語表示は文字化けしてしまうことから、GNOME端末にはUTF8の文字コードをデコードする機能があるからだろう想像は付きます。しかしviで表示する内容に関してはvirtualboxのターミナルで見ても結果が変わりませんでした。

この違いはもちろん、vi自体のターミナル表示制御によるものだろうとは思います。
それがマルチバイト文字に関して全くデコードできないということなのだろうと察することはできるのですが、ではそのデコード方法は存在するのだろうか?ということが知りたいです。
例えばコンパイルオプションとして存在するのか?といったことです。

軽くソースコードのMakefile(ソースコード内のusr.bin/vi/Makefile)を見てはみたのですが、iconvのオプションがある(ようだ)、という以上のことはわからず、安易にコンパイルしなおしてみる度胸もないので、もしご存じの方がいらしたら教えてください。
まるきり見当違いのことを尋ねていたらすみません。

(以下はviのMakefile)

#
# $FreeBSD: stable/10/usr.bin/vi/Makefile 262643 2014-03-01 03:09:16Z brooks $
#

.include <bsd.own.mk>

SRCDIR=         ${.CURDIR}/../../contrib/nvi
SUBDIR+=        catalog

WARNS?= 0       # some warn issues on 32 bit machines

VI=     nvi
EX=     nex
VIEW=   nview

PROG=   nvi

CFLAGS+=        -D__REGEX_PRIVATE

LINKS=  ${BINDIR}/${VI} ${BINDIR}/${EX} ${BINDIR}/${VI} ${BINDIR}/${VIEW}
LINKS+= ${BINDIR}/${VI} ${BINDIR}/vi ${BINDIR}/${EX} ${BINDIR}/ex
LINKS+= ${BINDIR}/${VI} ${BINDIR}/view

MAN=    ${SRCDIR}/docs/USD.doc/vi.man/vi.1
MLINKS+=vi.1 ex.1 vi.1 view.1
MLINKS+=vi.1 nex.1 vi.1 nview.1 vi.1 nvi.1

.PATH:  ${SRCDIR}/common
.PATH:  ${SRCDIR}/ex
.PATH:  ${SRCDIR}/cl
.PATH:  ${SRCDIR}/vi
.PATH:  ${SRCDIR}/regex

CFLAGS+=-I${.CURDIR} -I${SRCDIR} -I${SRCDIR}/regex

DPADD=          ${LIBUTIL}
LDADD=          -lutil

.if defined(RESCUE) || defined(RELEASE_CRUNCH) || ${MK_NCURSESW} == "no"
DPADD+=         ${LIBNCURSES}
LDADD+=         -lncurses
.else
CFLAGS+=        -DUSE_WIDECHAR
DPADD+=         ${LIBNCURSESW}
LDADD+=         -lncursesw
.endif

.if ${MK_ICONV} == "yes" && !defined(RESCUE) && !defined(RELEASE_CRUNCH)
CFLAGS+=        -DUSE_ICONV
.endif

CLEANFILES+=${EX}

# Vi curses sources
SRCS+=  cl_funcs.c cl_main.c cl_read.c cl_screen.c cl_term.c

# General sources.
SRCS+=  conv.c cut.c delete.c encoding.c exf.c key.c line.c log.c main.c mark.c msg.c options.c \
        options_f.c put.c recover.c screen.c search.c seq.c util.c

# Ex source.
SRCS+=  ex.c ex_abbrev.c ex_append.c ex_args.c ex_argv.c ex_at.c ex_bang.c \
        ex_cd.c ex_cmd.c ex_cscope.c ex_delete.c ex_display.c \
        ex_edit.c ex_equal.c ex_file.c ex_filter.c ex_global.c \
        ex_init.c ex_join.c ex_map.c ex_mark.c ex_mkexrc.c ex_move.c \
        ex_open.c ex_preserve.c ex_print.c ex_put.c ex_quit.c \
        ex_read.c ex_screen.c ex_script.c ex_set.c ex_shell.c \
        ex_shift.c ex_source.c ex_stop.c ex_subst.c ex_tag.c \
        ex_txt.c ex_undo.c ex_usage.c ex_util.c ex_version.c ex_visual.c \
        ex_write.c ex_yank.c ex_z.c

# Vi source.
SRCS+=  getc.c v_at.c v_ch.c v_cmd.c v_delete.c v_ex.c v_increment.c v_init.c \
        v_itxt.c v_left.c v_mark.c v_match.c v_paragraph.c v_put.c v_redraw.c \
        v_replace.c v_right.c v_screen.c v_scroll.c v_search.c v_section.c \
        v_sentence.c v_status.c v_txt.c v_ulcase.c v_undo.c \
        v_util.c v_word.c v_xchar.c v_yank.c v_z.c v_zexit.c vi.c

# Vi screen source.
SRCS+=  vs_line.c vs_msg.c vs_refresh.c vs_relative.c vs_smap.c vs_split.c

# Wide char regex
SRCS+=  regcomp.c regerror.c regexec.c regfree.c

.include <bsd.prog.mk>